git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9627 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
c4995095ee
commit
77a63206e7
|
@ -268,7 +268,7 @@ static mfs_error_t mfs_bank_set_header(MFSDriver *devp,
|
||||||
*
|
*
|
||||||
* @notapi
|
* @notapi
|
||||||
*/
|
*/
|
||||||
static mfs_error_t mfs_copy_bank(MFSDriver *devp,
|
static mfs_error_t mfs_bank_copy(MFSDriver *devp,
|
||||||
mfs_bank_t sbank,
|
mfs_bank_t sbank,
|
||||||
mfs_bank_t dbank) {
|
mfs_bank_t dbank) {
|
||||||
|
|
||||||
|
@ -289,7 +289,7 @@ static mfs_error_t mfs_copy_bank(MFSDriver *devp,
|
||||||
*
|
*
|
||||||
* @notapi
|
* @notapi
|
||||||
*/
|
*/
|
||||||
static mfs_error_t mfs_mount(MFSDriver *devp, mfs_bank_t bank) {
|
static mfs_error_t mfs_bank_mount(MFSDriver *devp, mfs_bank_t bank) {
|
||||||
|
|
||||||
(void)devp;
|
(void)devp;
|
||||||
(void)bank;
|
(void)bank;
|
||||||
|
@ -352,32 +352,32 @@ static mfs_error_t mfs_try_mount(MFSDriver *devp) {
|
||||||
case PAIR(MFS_BANK_ERASED, MFS_BANK_ERASED):
|
case PAIR(MFS_BANK_ERASED, MFS_BANK_ERASED):
|
||||||
/* Both banks erased, first initialization.*/
|
/* Both banks erased, first initialization.*/
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_NO_ERROR;
|
return MFS_NO_ERROR;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_ERASED, MFS_BANK_OK):
|
case PAIR(MFS_BANK_ERASED, MFS_BANK_OK):
|
||||||
/* Normal situation, bank one is used.*/
|
/* Normal situation, bank one is used.*/
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
return MFS_NO_ERROR;
|
return MFS_NO_ERROR;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_ERASED, MFS_BANK_PARTIAL):
|
case PAIR(MFS_BANK_ERASED, MFS_BANK_PARTIAL):
|
||||||
/* Bank zero is erased, bank one has problems.*/
|
/* Bank zero is erased, bank one has problems.*/
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_1, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_1, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt1 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt1 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_ERASED, MFS_BANK_GARBAGE):
|
case PAIR(MFS_BANK_ERASED, MFS_BANK_GARBAGE):
|
||||||
/* Bank zero is erased, bank one is not readable.*/
|
/* Bank zero is erased, bank one is not readable.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_OK, MFS_BANK_ERASED):
|
case PAIR(MFS_BANK_OK, MFS_BANK_ERASED):
|
||||||
/* Normal situation, bank zero is used.*/
|
/* Normal situation, bank zero is used.*/
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_NO_ERROR;
|
return MFS_NO_ERROR;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_OK, MFS_BANK_OK):
|
case PAIR(MFS_BANK_OK, MFS_BANK_OK):
|
||||||
|
@ -386,12 +386,12 @@ static mfs_error_t mfs_try_mount(MFSDriver *devp) {
|
||||||
if (cnt0 > cnt1) {
|
if (cnt0 > cnt1) {
|
||||||
/* Bank 0 is newer.*/
|
/* Bank 0 is newer.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Bank 1 is newer.*/
|
/* Bank 1 is newer.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
}
|
}
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
|
@ -401,30 +401,30 @@ static mfs_error_t mfs_try_mount(MFSDriver *devp) {
|
||||||
/* Normal bank zero is more recent than the partial bank one, the
|
/* Normal bank zero is more recent than the partial bank one, the
|
||||||
partial bank needs to be erased.*/
|
partial bank needs to be erased.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Partial bank one is more recent than the normal bank zero.*/
|
/* Partial bank one is more recent than the normal bank zero.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_1, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_1, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt1 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt1 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
}
|
}
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_OK, MFS_BANK_GARBAGE):
|
case PAIR(MFS_BANK_OK, MFS_BANK_GARBAGE):
|
||||||
/* Bank zero is normal, bank one is unreadable.*/
|
/* Bank zero is normal, bank one is unreadable.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_PARTIAL, MFS_BANK_ERASED):
|
case PAIR(MFS_BANK_PARTIAL, MFS_BANK_ERASED):
|
||||||
/* Bank zero has problems, bank one is erased.*/
|
/* Bank zero has problems, bank one is erased.*/
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_0, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_0, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_PARTIAL, MFS_BANK_OK):
|
case PAIR(MFS_BANK_PARTIAL, MFS_BANK_OK):
|
||||||
|
@ -433,15 +433,15 @@ static mfs_error_t mfs_try_mount(MFSDriver *devp) {
|
||||||
/* Normal bank one is more recent than the partial bank zero, the
|
/* Normal bank one is more recent than the partial bank zero, the
|
||||||
partial bank has to be erased.*/
|
partial bank has to be erased.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Partial bank zero is more recent than the normal bank one.*/
|
/* Partial bank zero is more recent than the normal bank one.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_0, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_0, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
}
|
}
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
|
@ -450,50 +450,50 @@ static mfs_error_t mfs_try_mount(MFSDriver *devp) {
|
||||||
if (cnt0 > cnt1) {
|
if (cnt0 > cnt1) {
|
||||||
/* Bank zero is newer, copying in bank one and using it.*/
|
/* Bank zero is newer, copying in bank one and using it.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_0, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_0, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Bank one is newer, copying in bank zero and using it.*/
|
/* Bank one is newer, copying in bank zero and using it.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_1, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_1, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt1 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt1 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
}
|
}
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_PARTIAL, MFS_BANK_GARBAGE):
|
case PAIR(MFS_BANK_PARTIAL, MFS_BANK_GARBAGE):
|
||||||
/* Bank zero has problems, bank one is unreadable.*/
|
/* Bank zero has problems, bank one is unreadable.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_0, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_0, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_1, cnt0 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_ERASED):
|
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_ERASED):
|
||||||
/* Bank zero is unreadable, bank one is erased.*/
|
/* Bank zero is unreadable, bank one is erased.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_OK):
|
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_OK):
|
||||||
/* Bank zero is unreadable, bank one is normal.*/
|
/* Bank zero is unreadable, bank one is normal.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_1));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_PARTIAL):
|
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_PARTIAL):
|
||||||
/* Bank zero is unreadable, bank one has problems.*/
|
/* Bank zero is unreadable, bank one has problems.*/
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_copy_bank(devp, MFS_BANK_1, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_copy(devp, MFS_BANK_1, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt0 + 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, cnt0 + 1));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_GARBAGE):
|
case PAIR(MFS_BANK_GARBAGE, MFS_BANK_GARBAGE):
|
||||||
|
@ -501,7 +501,7 @@ static mfs_error_t mfs_try_mount(MFSDriver *devp) {
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_0));
|
||||||
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
RET_ON_ERROR(mfs_bank_erase(devp, MFS_BANK_1));
|
||||||
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
RET_ON_ERROR(mfs_bank_set_header(devp, MFS_BANK_0, 1));
|
||||||
RET_ON_ERROR(mfs_mount(devp, MFS_BANK_0));
|
RET_ON_ERROR(mfs_bank_mount(devp, MFS_BANK_0));
|
||||||
return MFS_REPAIR_WARNING;
|
return MFS_REPAIR_WARNING;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue