summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sparmann <theseven@rockbox.org>2010-03-14 22:22:47 +0000
committerMichael Sparmann <theseven@rockbox.org>2010-03-14 22:22:47 +0000
commitf6ada7c30cf93fd5ca7c75bceb1c70542bfae0f3 (patch)
treeada14cff78fd032dc3347a1354805c57065e826e
parentc3c73060989e2f8f9244bdb47d20c24d28153a62 (diff)
downloadrockbox-f6ada7c30cf93fd5ca7c75bceb1c70542bfae0f3.tar.gz
rockbox-f6ada7c30cf93fd5ca7c75bceb1c70542bfae0f3.zip
ftl-nano2g.c: s/\(\*([^)]+)\)\./\1->/
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25186 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c300
1 files changed, 150 insertions, 150 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
index 56d148346c..9cb350d004 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
@@ -423,15 +423,15 @@ static struct mutex ftl_mtx;
423uint32_t ftl_find_devinfo(uint32_t bank) 423uint32_t ftl_find_devinfo(uint32_t bank)
424{ 424{
425 /* Scan the last 10% of the flash for device info pages */ 425 /* Scan the last 10% of the flash for device info pages */
426 uint32_t lowestBlock = (*ftl_nand_type).blocks 426 uint32_t lowestBlock = ftl_nand_type->blocks
427 - ((*ftl_nand_type).blocks / 10); 427 - (ftl_nand_type->blocks / 10);
428 uint32_t block, page, pagenum; 428 uint32_t block, page, pagenum;
429 for (block = (*ftl_nand_type).blocks - 1; block >= lowestBlock; block--) 429 for (block = ftl_nand_type->blocks - 1; block >= lowestBlock; block--)
430 { 430 {
431 page = (*ftl_nand_type).pagesperblock - 8; 431 page = ftl_nand_type->pagesperblock - 8;
432 for (; page < (*ftl_nand_type).pagesperblock; page++) 432 for (; page < ftl_nand_type->pagesperblock; page++)
433 { 433 {
434 pagenum = block * (*ftl_nand_type).pagesperblock + page; 434 pagenum = block * ftl_nand_type->pagesperblock + page;
435 if ((nand_read_page(bank, pagenum, ftl_buffer, 435 if ((nand_read_page(bank, pagenum, ftl_buffer,
436 &ftl_sparebuffer[0], 1, 0) & 0x11F) != 0) 436 &ftl_sparebuffer[0], 1, 0) & 0x11F) != 0)
437 continue; 437 continue;
@@ -460,7 +460,7 @@ uint32_t ftl_load_bbt(uint32_t bank, uint8_t* bbt)
460 uint32_t pagebase, page = ftl_find_devinfo(bank), page2; 460 uint32_t pagebase, page = ftl_find_devinfo(bank), page2;
461 uint32_t unk1, unk2, unk3; 461 uint32_t unk1, unk2, unk3;
462 if (page == 0) return 1; 462 if (page == 0) return 1;
463 pagebase = page & ~((*ftl_nand_type).pagesperblock - 1); 463 pagebase = page & ~(ftl_nand_type->pagesperblock - 1);
464 if ((nand_read_page(bank, page, ftl_buffer, 464 if ((nand_read_page(bank, page, ftl_buffer,
465 (uint32_t*)0, 1, 0) & 0x11F) != 0) return 1; 465 (uint32_t*)0, 1, 0) & 0x11F) != 0) return 1;
466 if (memcmp(&ftl_buffer[0x18], "BBT", 4) != 0) return 1; 466 if (memcmp(&ftl_buffer[0x18], "BBT", 4) != 0) return 1;
@@ -473,7 +473,7 @@ uint32_t ftl_load_bbt(uint32_t bank, uint8_t* bbt)
473 for (j = 0; ; j++) 473 for (j = 0; ; j++)
474 { 474 {
475 page2 = unk2 + i + unk3 * j; 475 page2 = unk2 + i + unk3 * j;
476 if (page2 >= (uint32_t)((*ftl_nand_type).pagesperblock - 8)) 476 if (page2 >= (uint32_t)(ftl_nand_type->pagesperblock - 8))
477 break; 477 break;
478 if ((nand_read_page(bank, pagebase + page2, ftl_buffer, 478 if ((nand_read_page(bank, pagebase + page2, ftl_buffer,
479 (void*)0, 1, 0) & 0x11F) == 0) 479 (void*)0, 1, 0) & 0x11F) == 0)
@@ -545,7 +545,7 @@ uint32_t ftl_vfl_store_cxt(uint32_t bank)
545 { 545 {
546 uint32_t index = ftl_vfl_cxt[bank].activecxtblock; 546 uint32_t index = ftl_vfl_cxt[bank].activecxtblock;
547 uint32_t block = ftl_vfl_cxt[bank].vflcxtblocks[index]; 547 uint32_t block = ftl_vfl_cxt[bank].vflcxtblocks[index];
548 uint32_t page = block * (*ftl_nand_type).pagesperblock; 548 uint32_t page = block * ftl_nand_type->pagesperblock;
549 page += ftl_vfl_cxt[bank].nextcxtpage - i; 549 page += ftl_vfl_cxt[bank].nextcxtpage - i;
550 nand_write_page(bank, page, &ftl_vfl_cxt[bank], &ftl_sparebuffer[0], 1); 550 nand_write_page(bank, page, &ftl_vfl_cxt[bank], &ftl_sparebuffer[0], 1);
551 } 551 }
@@ -554,7 +554,7 @@ uint32_t ftl_vfl_store_cxt(uint32_t bank)
554 { 554 {
555 uint32_t index = ftl_vfl_cxt[bank].activecxtblock; 555 uint32_t index = ftl_vfl_cxt[bank].activecxtblock;
556 uint32_t block = ftl_vfl_cxt[bank].vflcxtblocks[index]; 556 uint32_t block = ftl_vfl_cxt[bank].vflcxtblocks[index];
557 uint32_t page = block * (*ftl_nand_type).pagesperblock; 557 uint32_t page = block * ftl_nand_type->pagesperblock;
558 page += ftl_vfl_cxt[bank].nextcxtpage - i; 558 page += ftl_vfl_cxt[bank].nextcxtpage - i;
559 if ((nand_read_page(bank, page, ftl_buffer, 559 if ((nand_read_page(bank, page, ftl_buffer,
560 &ftl_sparebuffer[0], 1, 0) & 0x11F) != 0) 560 &ftl_sparebuffer[0], 1, 0) & 0x11F) != 0)
@@ -576,7 +576,7 @@ uint32_t ftl_vfl_store_cxt(uint32_t bank)
576 retries until it works or all available pages have been tried */ 576 retries until it works or all available pages have been tried */
577uint32_t ftl_vfl_commit_cxt(uint32_t bank) 577uint32_t ftl_vfl_commit_cxt(uint32_t bank)
578{ 578{
579 if (ftl_vfl_cxt[bank].nextcxtpage + 8 <= (*ftl_nand_type).pagesperblock) 579 if (ftl_vfl_cxt[bank].nextcxtpage + 8 <= ftl_nand_type->pagesperblock)
580 if (ftl_vfl_store_cxt(bank) == 0) return 0; 580 if (ftl_vfl_store_cxt(bank) == 0) return 0;
581 uint32_t current = ftl_vfl_cxt[bank].activecxtblock; 581 uint32_t current = ftl_vfl_cxt[bank].activecxtblock;
582 uint32_t i = current, j; 582 uint32_t i = current, j;
@@ -587,7 +587,7 @@ uint32_t ftl_vfl_commit_cxt(uint32_t bank)
587 if (ftl_vfl_cxt[bank].vflcxtblocks[i] == 0xFFFF) continue; 587 if (ftl_vfl_cxt[bank].vflcxtblocks[i] == 0xFFFF) continue;
588 for (j = 0; j < 4; j++) 588 for (j = 0; j < 4; j++)
589 if (nand_block_erase(bank, ftl_vfl_cxt[bank].vflcxtblocks[i] 589 if (nand_block_erase(bank, ftl_vfl_cxt[bank].vflcxtblocks[i]
590 * (*ftl_nand_type).pagesperblock) == 0) 590 * ftl_nand_type->pagesperblock) == 0)
591 break; 591 break;
592 if (j == 4) continue; 592 if (j == 4) continue;
593 ftl_vfl_cxt[bank].activecxtblock = i; 593 ftl_vfl_cxt[bank].activecxtblock = i;
@@ -656,12 +656,12 @@ uint32_t ftl_vfl_read_page(uint32_t bank, uint32_t block,
656 uint32_t i; 656 uint32_t i;
657 for (i = 0; i < 8; i++) 657 for (i = 0; i < 8; i++)
658 { 658 {
659 uint32_t page = block * (*ftl_nand_type).pagesperblock 659 uint32_t page = block * ftl_nand_type->pagesperblock
660 + startpage + i; 660 + startpage + i;
661 if ((nand_read_page(bank, page, databuffer, 661 if ((nand_read_page(bank, page, databuffer,
662 sparebuffer, 1, 1) & 0x11F) == 0) 662 sparebuffer, 1, 1) & 0x11F) == 0)
663 if ((*sparebuffer).meta.field_8 == 0 663 if (sparebuffer->meta.field_8 == 0
664 && (*sparebuffer).meta.type == 0x80) 664 && sparebuffer->meta.type == 0x80)
665 return 0; 665 return 0;
666 } 666 }
667 return 1; 667 return 1;
@@ -787,7 +787,7 @@ uint32_t ftl_vfl_remap_block(uint32_t bank, uint32_t block)
787 uint32_t i; 787 uint32_t i;
788 uint32_t newblock = 0, newidx; 788 uint32_t newblock = 0, newidx;
789 panicf("FTL: Remapping bank %u block %u!", (unsigned)bank, (unsigned)block); 789 panicf("FTL: Remapping bank %u block %u!", (unsigned)bank, (unsigned)block);
790 if (bank >= ftl_banks || block >= (*ftl_nand_type).blocks) return 0; 790 if (bank >= ftl_banks || block >= ftl_nand_type->blocks) return 0;
791 for (i = 0; i < ftl_vfl_cxt[bank].sparecount; i++) 791 for (i = 0; i < ftl_vfl_cxt[bank].sparecount; i++)
792 if (ftl_vfl_cxt[bank].remaptable[i] == 0) 792 if (ftl_vfl_cxt[bank].remaptable[i] == 0)
793 { 793 {
@@ -798,7 +798,7 @@ uint32_t ftl_vfl_remap_block(uint32_t bank, uint32_t block)
798 if (newblock == 0) return 0; 798 if (newblock == 0) return 0;
799 for (i = 0; i < 9; i++) 799 for (i = 0; i < 9; i++)
800 if (nand_block_erase(bank, 800 if (nand_block_erase(bank,
801 newblock * (*ftl_nand_type).pagesperblock) == 0) 801 newblock * ftl_nand_type->pagesperblock) == 0)
802 break; 802 break;
803 for (i = 0; i < newidx; i++) 803 for (i = 0; i < newidx; i++)
804 if (ftl_vfl_cxt[bank].remaptable[i] == block) 804 if (ftl_vfl_cxt[bank].remaptable[i] == block)
@@ -815,19 +815,19 @@ uint32_t ftl_vfl_remap_block(uint32_t bank, uint32_t block)
815uint32_t ftl_vfl_read(uint32_t vpage, void* buffer, void* sparebuffer, 815uint32_t ftl_vfl_read(uint32_t vpage, void* buffer, void* sparebuffer,
816 uint32_t checkempty, uint32_t remaponfail) 816 uint32_t checkempty, uint32_t remaponfail)
817{ 817{
818 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 818 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
819 uint32_t syshyperblocks = (*ftl_nand_type).blocks 819 uint32_t syshyperblocks = ftl_nand_type->blocks
820 - (*ftl_nand_type).userblocks - 0x17; 820 - ftl_nand_type->userblocks - 0x17;
821 uint32_t abspage = vpage + ppb * syshyperblocks; 821 uint32_t abspage = vpage + ppb * syshyperblocks;
822 if (abspage >= (*ftl_nand_type).blocks * ppb || abspage < ppb) 822 if (abspage >= ftl_nand_type->blocks * ppb || abspage < ppb)
823 panicf("FTL: Trying to read out-of-bounds vPage %u", (unsigned)vpage); 823 panicf("FTL: Trying to read out-of-bounds vPage %u", (unsigned)vpage);
824 //return 4; 824 //return 4;
825 825
826 uint32_t bank = abspage % ftl_banks; 826 uint32_t bank = abspage % ftl_banks;
827 uint32_t block = abspage / ((*ftl_nand_type).pagesperblock * ftl_banks); 827 uint32_t block = abspage / (ftl_nand_type->pagesperblock * ftl_banks);
828 uint32_t page = (abspage / ftl_banks) % (*ftl_nand_type).pagesperblock; 828 uint32_t page = (abspage / ftl_banks) % ftl_nand_type->pagesperblock;
829 uint32_t physblock = ftl_vfl_get_physical_block(bank, block); 829 uint32_t physblock = ftl_vfl_get_physical_block(bank, block);
830 uint32_t physpage = physblock * (*ftl_nand_type).pagesperblock + page; 830 uint32_t physpage = physblock * ftl_nand_type->pagesperblock + page;
831 831
832 uint32_t ret = nand_read_page(bank, physpage, buffer, 832 uint32_t ret = nand_read_page(bank, physpage, buffer,
833 sparebuffer, 1, checkempty); 833 sparebuffer, 1, checkempty);
@@ -855,17 +855,17 @@ uint32_t ftl_vfl_read_fast(uint32_t vpage, void* buffer, void* sparebuffer,
855 uint32_t checkempty, uint32_t remaponfail) 855 uint32_t checkempty, uint32_t remaponfail)
856{ 856{
857 uint32_t i, rc = 0; 857 uint32_t i, rc = 0;
858 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 858 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
859 uint32_t syshyperblocks = (*ftl_nand_type).blocks 859 uint32_t syshyperblocks = ftl_nand_type->blocks
860 - (*ftl_nand_type).userblocks - 0x17; 860 - ftl_nand_type->userblocks - 0x17;
861 uint32_t abspage = vpage + ppb * syshyperblocks; 861 uint32_t abspage = vpage + ppb * syshyperblocks;
862 if (abspage + ftl_banks - 1 >= (*ftl_nand_type).blocks * ppb || abspage < ppb) 862 if (abspage + ftl_banks - 1 >= ftl_nand_type->blocks * ppb || abspage < ppb)
863 panicf("FTL: Trying to read out-of-bounds vPage %u", (unsigned)vpage); 863 panicf("FTL: Trying to read out-of-bounds vPage %u", (unsigned)vpage);
864 //return 4; 864 //return 4;
865 865
866 uint32_t bank = abspage % ftl_banks; 866 uint32_t bank = abspage % ftl_banks;
867 uint32_t block = abspage / ((*ftl_nand_type).pagesperblock * ftl_banks); 867 uint32_t block = abspage / (ftl_nand_type->pagesperblock * ftl_banks);
868 uint32_t page = (abspage / ftl_banks) % (*ftl_nand_type).pagesperblock; 868 uint32_t page = (abspage / ftl_banks) % ftl_nand_type->pagesperblock;
869 uint32_t remapped = 0; 869 uint32_t remapped = 0;
870 for (i = 0; i < ftl_banks; i++) 870 for (i = 0; i < ftl_banks; i++)
871 if (ftl_vfl_get_physical_block(i, block) != block) 871 if (ftl_vfl_get_physical_block(i, block) != block)
@@ -886,7 +886,7 @@ uint32_t ftl_vfl_read_fast(uint32_t vpage, void* buffer, void* sparebuffer,
886 } 886 }
887 return rc; 887 return rc;
888 } 888 }
889 uint32_t physpage = block * (*ftl_nand_type).pagesperblock + page; 889 uint32_t physpage = block * ftl_nand_type->pagesperblock + page;
890 890
891 rc = nand_read_page_fast(physpage, buffer, sparebuffer, 1, checkempty); 891 rc = nand_read_page_fast(physpage, buffer, sparebuffer, 1, checkempty);
892 if (!(rc & 0xdddd)) return rc; 892 if (!(rc & 0xdddd)) return rc;
@@ -925,11 +925,11 @@ uint32_t ftl_vfl_write(uint32_t vpage, uint32_t count,
925 void* buffer, void* sparebuffer) 925 void* buffer, void* sparebuffer)
926{ 926{
927 uint32_t i, j; 927 uint32_t i, j;
928 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 928 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
929 uint32_t syshyperblocks = (*ftl_nand_type).blocks 929 uint32_t syshyperblocks = ftl_nand_type->blocks
930 - (*ftl_nand_type).userblocks - 0x17; 930 - ftl_nand_type->userblocks - 0x17;
931 uint32_t abspage = vpage + ppb * syshyperblocks; 931 uint32_t abspage = vpage + ppb * syshyperblocks;
932 if (abspage + count > (*ftl_nand_type).blocks * ppb || abspage < ppb) 932 if (abspage + count > ftl_nand_type->blocks * ppb || abspage < ppb)
933 panicf("FTL: Trying to write out-of-bounds vPage %u", 933 panicf("FTL: Trying to write out-of-bounds vPage %u",
934 (unsigned)vpage); 934 (unsigned)vpage);
935 //return 4; 935 //return 4;
@@ -947,10 +947,10 @@ uint32_t ftl_vfl_write(uint32_t vpage, uint32_t count,
947 physpage[j] = physpage[j - 1]; 947 physpage[j] = physpage[j - 1];
948 } 948 }
949 bank[0] = abspage % ftl_banks; 949 bank[0] = abspage % ftl_banks;
950 block[0] = abspage / ((*ftl_nand_type).pagesperblock * ftl_banks); 950 block[0] = abspage / (ftl_nand_type->pagesperblock * ftl_banks);
951 uint32_t page = (abspage / ftl_banks) % (*ftl_nand_type).pagesperblock; 951 uint32_t page = (abspage / ftl_banks) % ftl_nand_type->pagesperblock;
952 uint32_t physblock = ftl_vfl_get_physical_block(bank[0], block[0]); 952 uint32_t physblock = ftl_vfl_get_physical_block(bank[0], block[0]);
953 physpage[0] = physblock * (*ftl_nand_type).pagesperblock + page; 953 physpage[0] = physblock * ftl_nand_type->pagesperblock + page;
954 954
955 if (i >= ftl_banks) 955 if (i >= ftl_banks)
956 if (nand_write_page_collect(bank[ftl_banks])) 956 if (nand_write_page_collect(bank[ftl_banks]))
@@ -1006,8 +1006,8 @@ uint32_t ftl_vfl_open(void)
1006 uint8_t bbt[0x410]; 1006 uint8_t bbt[0x410];
1007#endif 1007#endif
1008 1008
1009 uint32_t syshyperblocks = (*ftl_nand_type).blocks 1009 uint32_t syshyperblocks = ftl_nand_type->blocks
1010 - (*ftl_nand_type).userblocks - 0x18; 1010 - ftl_nand_type->userblocks - 0x18;
1011 1011
1012 for (i = 0; i < ftl_banks; i++) 1012 for (i = 0; i < ftl_banks; i++)
1013#ifndef FTL_READONLY 1013#ifndef FTL_READONLY
@@ -1027,7 +1027,7 @@ uint32_t ftl_vfl_open(void)
1027 { 1027 {
1028 struct ftl_vfl_cxt_type* cxt; 1028 struct ftl_vfl_cxt_type* cxt;
1029 cxt = (struct ftl_vfl_cxt_type*)ftl_buffer; 1029 cxt = (struct ftl_vfl_cxt_type*)ftl_buffer;
1030 memcpy(vflcxtblock, &(*cxt).vflcxtblocks, 8); 1030 memcpy(vflcxtblock, &cxt->vflcxtblocks, 8);
1031 minusn = 0xFFFFFFFF; 1031 minusn = 0xFFFFFFFF;
1032 vflcxtidx = 4; 1032 vflcxtidx = 4;
1033 for (k = 0; k < 4; k++) 1033 for (k = 0; k < 4; k++)
@@ -1045,7 +1045,7 @@ uint32_t ftl_vfl_open(void)
1045 panicf("FTL: No VFL CXT block found on bank %u!", 1045 panicf("FTL: No VFL CXT block found on bank %u!",
1046 (unsigned)i); 1046 (unsigned)i);
1047 last = 0; 1047 last = 0;
1048 uint32_t max = (*ftl_nand_type).pagesperblock; 1048 uint32_t max = ftl_nand_type->pagesperblock;
1049 for (k = 8; k < max; k += 8) 1049 for (k = 8; k < max; k += 8)
1050 { 1050 {
1051 if (ftl_vfl_read_page(i, vflcxtblock[vflcxtidx], 1051 if (ftl_vfl_read_page(i, vflcxtblock[vflcxtidx],
@@ -1073,7 +1073,7 @@ uint32_t ftl_vfl_open(void)
1073 panicf("FTL: Couldn't load bank %u lowlevel BBT!", (unsigned)i); 1073 panicf("FTL: Couldn't load bank %u lowlevel BBT!", (unsigned)i);
1074 cxt = ftl_vfl_get_newest_cxt(); 1074 cxt = ftl_vfl_get_newest_cxt();
1075 for (i = 0; i < ftl_banks; i++) 1075 for (i = 0; i < ftl_banks; i++)
1076 memcpy(ftl_vfl_cxt[i].ftlctrlblocks, (*cxt).ftlctrlblocks, 6); 1076 memcpy(ftl_vfl_cxt[i].ftlctrlblocks, cxt->ftlctrlblocks, 6);
1077 return 0; 1077 return 0;
1078} 1078}
1079 1079
@@ -1083,28 +1083,28 @@ uint32_t ftl_open(void)
1083{ 1083{
1084 uint32_t i; 1084 uint32_t i;
1085 uint32_t ret; 1085 uint32_t ret;
1086 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1086 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1087 struct ftl_vfl_cxt_type* cxt = ftl_vfl_get_newest_cxt(); 1087 struct ftl_vfl_cxt_type* cxt = ftl_vfl_get_newest_cxt();
1088 1088
1089 uint32_t ftlcxtblock = 0xffffffff; 1089 uint32_t ftlcxtblock = 0xffffffff;
1090 uint32_t minusn = 0xffffffff; 1090 uint32_t minusn = 0xffffffff;
1091 for (i = 0; i < 3; i++) 1091 for (i = 0; i < 3; i++)
1092 { 1092 {
1093 ret = ftl_vfl_read(ppb * (*cxt).ftlctrlblocks[i], 1093 ret = ftl_vfl_read(ppb * cxt->ftlctrlblocks[i],
1094 ftl_buffer, &ftl_sparebuffer[0], 1, 0); 1094 ftl_buffer, &ftl_sparebuffer[0], 1, 0);
1095 if ((ret &= 0x11F) != 0) continue; 1095 if ((ret &= 0x11F) != 0) continue;
1096 if (ftl_sparebuffer[0].meta.type - 0x43 > 4) continue; 1096 if (ftl_sparebuffer[0].meta.type - 0x43 > 4) continue;
1097 if (ftlcxtblock != 0xffffffff && ftl_sparebuffer[0].meta.usn >= minusn) 1097 if (ftlcxtblock != 0xffffffff && ftl_sparebuffer[0].meta.usn >= minusn)
1098 continue; 1098 continue;
1099 minusn = ftl_sparebuffer[0].meta.usn; 1099 minusn = ftl_sparebuffer[0].meta.usn;
1100 ftlcxtblock = (*cxt).ftlctrlblocks[i]; 1100 ftlcxtblock = cxt->ftlctrlblocks[i];
1101 } 1101 }
1102 1102
1103 if (ftlcxtblock == 0xffffffff) //return 1; 1103 if (ftlcxtblock == 0xffffffff) //return 1;
1104 panicf("FTL: Couldn't find readable FTL CXT block!"); 1104 panicf("FTL: Couldn't find readable FTL CXT block!");
1105 1105
1106 uint32_t ftlcxtfound = 0; 1106 uint32_t ftlcxtfound = 0;
1107 for (i = (*ftl_nand_type).pagesperblock * ftl_banks - 1; i > 0; i--) 1107 for (i = ftl_nand_type->pagesperblock * ftl_banks - 1; i > 0; i--)
1108 { 1108 {
1109 ret = ftl_vfl_read(ppb * ftlcxtblock + i, 1109 ret = ftl_vfl_read(ppb * ftlcxtblock + i,
1110 ftl_buffer, &ftl_sparebuffer[0], 1, 0); 1110 ftl_buffer, &ftl_sparebuffer[0], 1, 0);
@@ -1128,8 +1128,8 @@ uint32_t ftl_open(void)
1128 if (ftlcxtfound == 0) //return 1; 1128 if (ftlcxtfound == 0) //return 1;
1129 panicf("FTL: Couldn't find FTL CXT page!"); 1129 panicf("FTL: Couldn't find FTL CXT page!");
1130 1130
1131 uint32_t pagestoread = (*ftl_nand_type).userblocks >> 10; 1131 uint32_t pagestoread = ftl_nand_type->userblocks >> 10;
1132 if (((*ftl_nand_type).userblocks & 0x1FF) != 0) pagestoread++; 1132 if ((ftl_nand_type->userblocks & 0x1FF) != 0) pagestoread++;
1133 1133
1134 for (i = 0; i < pagestoread; i++) 1134 for (i = 0; i < pagestoread; i++)
1135 { 1135 {
@@ -1139,15 +1139,15 @@ uint32_t ftl_open(void)
1139 //return 1; 1139 //return 1;
1140 1140
1141 uint32_t toread = 2048; 1141 uint32_t toread = 2048;
1142 if (toread > ((*ftl_nand_type).userblocks << 1) - (i << 11)) 1142 if (toread > (ftl_nand_type->userblocks << 1) - (i << 11))
1143 toread = ((*ftl_nand_type).userblocks << 1) - (i << 11); 1143 toread = (ftl_nand_type->userblocks << 1) - (i << 11);
1144 1144
1145 memcpy(&ftl_map[i << 10], ftl_buffer, toread); 1145 memcpy(&ftl_map[i << 10], ftl_buffer, toread);
1146 } 1146 }
1147 1147
1148#ifndef FTL_READONLY 1148#ifndef FTL_READONLY
1149 pagestoread = ((*ftl_nand_type).userblocks + 23) >> 10; 1149 pagestoread = (ftl_nand_type->userblocks + 23) >> 10;
1150 if ((((*ftl_nand_type).userblocks + 23) & 0x1FF) != 0) pagestoread++; 1150 if (((ftl_nand_type->userblocks + 23) & 0x1FF) != 0) pagestoread++;
1151 1151
1152 for (i = 0; i < pagestoread; i++) 1152 for (i = 0; i < pagestoread; i++)
1153 { 1153 {
@@ -1157,8 +1157,8 @@ uint32_t ftl_open(void)
1157 //return 1; 1157 //return 1;
1158 1158
1159 uint32_t toread = 2048; 1159 uint32_t toread = 2048;
1160 if (toread > (((*ftl_nand_type).userblocks + 23) << 1) - (i << 11)) 1160 if (toread > ((ftl_nand_type->userblocks + 23) << 1) - (i << 11))
1161 toread = (((*ftl_nand_type).userblocks + 23) << 1) - (i << 11); 1161 toread = ((ftl_nand_type->userblocks + 23) << 1) - (i << 11);
1162 1162
1163 memcpy(&ftl_erasectr[i << 10], ftl_buffer, toread); 1163 memcpy(&ftl_erasectr[i << 10], ftl_buffer, toread);
1164 } 1164 }
@@ -1197,10 +1197,10 @@ struct ftl_log_type* ftl_get_log_entry(uint32_t block)
1197uint32_t ftl_read(uint32_t sector, uint32_t count, void* buffer) 1197uint32_t ftl_read(uint32_t sector, uint32_t count, void* buffer)
1198{ 1198{
1199 uint32_t i, j; 1199 uint32_t i, j;
1200 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1200 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1201 uint32_t error = 0; 1201 uint32_t error = 0;
1202 1202
1203 if (sector + count > (*ftl_nand_type).userblocks * ppb) 1203 if (sector + count > ftl_nand_type->userblocks * ppb)
1204 return 1; 1204 return 1;
1205 1205
1206 if (count == 0) return 0; 1206 if (count == 0) return 0;
@@ -1216,10 +1216,10 @@ uint32_t ftl_read(uint32_t sector, uint32_t count, void* buffer)
1216#ifndef FTL_READONLY 1216#ifndef FTL_READONLY
1217 struct ftl_log_type* logentry = ftl_get_log_entry(block); 1217 struct ftl_log_type* logentry = ftl_get_log_entry(block);
1218 if (logentry != (struct ftl_log_type*)0) 1218 if (logentry != (struct ftl_log_type*)0)
1219 if ((*logentry).scatteredvblock != 0xFFFF 1219 if (logentry->scatteredvblock != 0xFFFF
1220 && (*logentry).pageoffsets[page] != 0xFFFF) 1220 && logentry->pageoffsets[page] != 0xFFFF)
1221 abspage = (*logentry).scatteredvblock * ppb 1221 abspage = logentry->scatteredvblock * ppb
1222 + (*logentry).pageoffsets[page]; 1222 + logentry->pageoffsets[page];
1223#endif 1223#endif
1224 1224
1225#ifndef FTL_READONLY 1225#ifndef FTL_READONLY
@@ -1266,9 +1266,9 @@ uint32_t ftl_read(uint32_t sector, uint32_t count, void* buffer)
1266uint32_t ftl_erase_block_internal(uint32_t block) 1266uint32_t ftl_erase_block_internal(uint32_t block)
1267{ 1267{
1268 uint32_t i, j; 1268 uint32_t i, j;
1269 block = block + (*ftl_nand_type).blocks 1269 block = block + ftl_nand_type->blocks
1270 - (*ftl_nand_type).userblocks - 0x17; 1270 - ftl_nand_type->userblocks - 0x17;
1271 if (block == 0 || block >= (*ftl_nand_type).blocks) return 1; 1271 if (block == 0 || block >= ftl_nand_type->blocks) return 1;
1272 for (i = 0; i < ftl_banks; i++) 1272 for (i = 0; i < ftl_banks; i++)
1273 { 1273 {
1274 if (ftl_vfl_check_remap_scheduled(i, block) == 1) 1274 if (ftl_vfl_check_remap_scheduled(i, block) == 1)
@@ -1281,7 +1281,7 @@ uint32_t ftl_erase_block_internal(uint32_t block)
1281 uint32_t rc; 1281 uint32_t rc;
1282 for (j = 0; j < 3; j++) 1282 for (j = 0; j < 3; j++)
1283 { 1283 {
1284 rc = nand_block_erase(i, pblock * (*ftl_nand_type).pagesperblock); 1284 rc = nand_block_erase(i, pblock * ftl_nand_type->pagesperblock);
1285 if (rc == 0) break; 1285 if (rc == 0) break;
1286 } 1286 }
1287 if (rc != 0) 1287 if (rc != 0)
@@ -1342,7 +1342,7 @@ uint32_t ftl_allocate_pool_block(void)
1342 ftl_cxt.blockpool[bestidx] = ftl_cxt.blockpool[ftl_cxt.nextfreeidx]; 1342 ftl_cxt.blockpool[bestidx] = ftl_cxt.blockpool[ftl_cxt.nextfreeidx];
1343 ftl_cxt.blockpool[ftl_cxt.nextfreeidx] = block; 1343 ftl_cxt.blockpool[ftl_cxt.nextfreeidx] = block;
1344 } 1344 }
1345 if (block > (uint32_t)(*ftl_nand_type).userblocks + 0x17) 1345 if (block > (uint32_t)ftl_nand_type->userblocks + 0x17)
1346 panicf("FTL: Bad block number in pool: %u", (unsigned)block); 1346 panicf("FTL: Bad block number in pool: %u", (unsigned)block);
1347 if (ftl_erase_block(block) != 0) return 0xFFFFFFFF; 1347 if (ftl_erase_block(block) != 0) return 0xFFFFFFFF;
1348 if (++ftl_cxt.nextfreeidx == 0x14) ftl_cxt.nextfreeidx = 0; 1348 if (++ftl_cxt.nextfreeidx == 0x14) ftl_cxt.nextfreeidx = 0;
@@ -1356,7 +1356,7 @@ uint32_t ftl_allocate_pool_block(void)
1356/* Releases a vBlock back into the pool */ 1356/* Releases a vBlock back into the pool */
1357void ftl_release_pool_block(uint32_t block) 1357void ftl_release_pool_block(uint32_t block)
1358{ 1358{
1359 if (block >= (uint32_t)(*ftl_nand_type).userblocks + 0x17) 1359 if (block >= (uint32_t)ftl_nand_type->userblocks + 0x17)
1360 panicf("FTL: Tried to release block %u", (unsigned)block); 1360 panicf("FTL: Tried to release block %u", (unsigned)block);
1361 uint32_t idx = ftl_cxt.nextfreeidx + ftl_cxt.freecount++; 1361 uint32_t idx = ftl_cxt.nextfreeidx + ftl_cxt.freecount++;
1362 if (idx >= 0x14) idx -= 0x14; 1362 if (idx >= 0x14) idx -= 0x14;
@@ -1410,7 +1410,7 @@ uint32_t ftl_save_erasectr_page(uint32_t index)
1410uint32_t ftl_next_ctrl_pool_page(void) 1410uint32_t ftl_next_ctrl_pool_page(void)
1411{ 1411{
1412 uint32_t i; 1412 uint32_t i;
1413 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1413 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1414 if (++ftl_cxt.ftlctrlpage % ppb != 0) return 0; 1414 if (++ftl_cxt.ftlctrlpage % ppb != 0) return 0;
1415 for (i = 0; i < 3; i++) 1415 for (i = 0; i < 3; i++)
1416 if ((ftl_cxt.ftlctrlblocks[i] + 1) * ppb == ftl_cxt.ftlctrlpage) 1416 if ((ftl_cxt.ftlctrlblocks[i] + 1) * ppb == ftl_cxt.ftlctrlpage)
@@ -1421,8 +1421,8 @@ uint32_t ftl_next_ctrl_pool_page(void)
1421 if (newblock == 0xFFFFFFFF) return 1; 1421 if (newblock == 0xFFFFFFFF) return 1;
1422 ftl_cxt.ftlctrlblocks[i] = newblock; 1422 ftl_cxt.ftlctrlblocks[i] = newblock;
1423 ftl_cxt.ftlctrlpage = newblock * ppb; 1423 ftl_cxt.ftlctrlpage = newblock * ppb;
1424 uint32_t pagestoread = ((*ftl_nand_type).userblocks + 23) >> 10; 1424 uint32_t pagestoread = (ftl_nand_type->userblocks + 23) >> 10;
1425 if ((((*ftl_nand_type).userblocks + 23) & 0x1FF) != 0) pagestoread++; 1425 if (((ftl_nand_type->userblocks + 23) & 0x1FF) != 0) pagestoread++;
1426 for (i = 0; i < pagestoread; i++) 1426 for (i = 0; i < pagestoread; i++)
1427 if (oldblock * ppb <= ftl_cxt.ftl_erasectr_pages[i] 1427 if (oldblock * ppb <= ftl_cxt.ftl_erasectr_pages[i]
1428 && (oldblock + 1) * ppb > ftl_cxt.ftl_erasectr_pages[i]) 1428 && (oldblock + 1) * ppb > ftl_cxt.ftl_erasectr_pages[i])
@@ -1448,7 +1448,7 @@ uint32_t ftl_next_ctrl_pool_page(void)
1448uint32_t ftl_copy_page(uint32_t source, uint32_t destination, 1448uint32_t ftl_copy_page(uint32_t source, uint32_t destination,
1449 uint32_t lpn, uint32_t type) 1449 uint32_t lpn, uint32_t type)
1450{ 1450{
1451 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1451 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1452 uint32_t rc = ftl_vfl_read(source, ftl_copybuffer[0], 1452 uint32_t rc = ftl_vfl_read(source, ftl_copybuffer[0],
1453 &ftl_copyspare[0], 1, 1) & 0x11F; 1453 &ftl_copyspare[0], 1, 1) & 0x11F;
1454 memset(&ftl_copyspare[0], 0xFF, 0x40); 1454 memset(&ftl_copyspare[0], 0xFF, 0x40);
@@ -1469,7 +1469,7 @@ uint32_t ftl_copy_page(uint32_t source, uint32_t destination,
1469uint32_t ftl_copy_block(uint32_t source, uint32_t destination) 1469uint32_t ftl_copy_block(uint32_t source, uint32_t destination)
1470{ 1470{
1471 uint32_t i, j; 1471 uint32_t i, j;
1472 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1472 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1473 uint32_t error = 0; 1473 uint32_t error = 0;
1474 ftl_cxt.nextblockusn++; 1474 ftl_cxt.nextblockusn++;
1475 for (i = 0; i < ppb; i += FTL_COPYBUF_SIZE) 1475 for (i = 0; i < ppb; i += FTL_COPYBUF_SIZE)
@@ -1510,9 +1510,9 @@ uint32_t ftl_copy_block(uint32_t source, uint32_t destination)
1510/* Clears ftl_log.issequential, if something violating that is written. */ 1510/* Clears ftl_log.issequential, if something violating that is written. */
1511void ftl_check_still_sequential(struct ftl_log_type* entry, uint32_t page) 1511void ftl_check_still_sequential(struct ftl_log_type* entry, uint32_t page)
1512{ 1512{
1513 if ((*entry).pagesused != (*entry).pagescurrent 1513 if (entry->pagesused != entry->pagescurrent
1514 || (*entry).pageoffsets[page] != page) 1514 || entry->pageoffsets[page] != page)
1515 (*entry).issequential = 0; 1515 entry->issequential = 0;
1516} 1516}
1517#endif 1517#endif
1518 1518
@@ -1528,51 +1528,51 @@ void ftl_check_still_sequential(struct ftl_log_type* entry, uint32_t page)
1528uint32_t ftl_compact_scattered(struct ftl_log_type* entry) 1528uint32_t ftl_compact_scattered(struct ftl_log_type* entry)
1529{ 1529{
1530 uint32_t i, j; 1530 uint32_t i, j;
1531 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1531 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1532 uint32_t error; 1532 uint32_t error;
1533 struct ftl_log_type backup; 1533 struct ftl_log_type backup;
1534 if ((*entry).pagescurrent == 0) 1534 if (entry->pagescurrent == 0)
1535 { 1535 {
1536 ftl_release_pool_block((*entry).scatteredvblock); 1536 ftl_release_pool_block(entry->scatteredvblock);
1537 (*entry).scatteredvblock = 0xFFFF; 1537 entry->scatteredvblock = 0xFFFF;
1538 return 0; 1538 return 0;
1539 } 1539 }
1540 backup = *entry; 1540 backup = *entry;
1541 memcpy(ftl_offsets_backup, (*entry).pageoffsets, 0x400); 1541 memcpy(ftl_offsets_backup, entry->pageoffsets, 0x400);
1542 for (i = 0; i < 4; i++) 1542 for (i = 0; i < 4; i++)
1543 { 1543 {
1544 uint32_t block = ftl_allocate_pool_block(); 1544 uint32_t block = ftl_allocate_pool_block();
1545 if (block == 0xFFFFFFFF) return 1; 1545 if (block == 0xFFFFFFFF) return 1;
1546 (*entry).pagesused = 0; 1546 entry->pagesused = 0;
1547 (*entry).pagescurrent = 0; 1547 entry->pagescurrent = 0;
1548 (*entry).issequential = 1; 1548 entry->issequential = 1;
1549 (*entry).scatteredvblock = block; 1549 entry->scatteredvblock = block;
1550 error = 0; 1550 error = 0;
1551 for (j = 0; j < ppb; j++) 1551 for (j = 0; j < ppb; j++)
1552 if ((*entry).pageoffsets[j] != 0xFFFF) 1552 if (entry->pageoffsets[j] != 0xFFFF)
1553 { 1553 {
1554 uint32_t lpn = (*entry).logicalvblock * ppb + j; 1554 uint32_t lpn = entry->logicalvblock * ppb + j;
1555 uint32_t newpage = block * ppb + (*entry).pagesused; 1555 uint32_t newpage = block * ppb + entry->pagesused;
1556 uint32_t oldpage = backup.scatteredvblock * ppb 1556 uint32_t oldpage = backup.scatteredvblock * ppb
1557 + (*entry).pageoffsets[j]; 1557 + entry->pageoffsets[j];
1558 if (ftl_copy_page(oldpage, newpage, lpn, 1558 if (ftl_copy_page(oldpage, newpage, lpn,
1559 (*entry).issequential) != 0) 1559 entry->issequential) != 0)
1560 { 1560 {
1561 error = 1; 1561 error = 1;
1562 break; 1562 break;
1563 } 1563 }
1564 (*entry).pageoffsets[j] = (*entry).pagesused++; 1564 entry->pageoffsets[j] = entry->pagesused++;
1565 (*entry).pagescurrent++; 1565 entry->pagescurrent++;
1566 ftl_check_still_sequential(entry, j); 1566 ftl_check_still_sequential(entry, j);
1567 } 1567 }
1568 if (backup.pagescurrent != (*entry).pagescurrent) error = 1; 1568 if (backup.pagescurrent != entry->pagescurrent) error = 1;
1569 if (error == 0) 1569 if (error == 0)
1570 { 1570 {
1571 ftl_release_pool_block(backup.scatteredvblock); 1571 ftl_release_pool_block(backup.scatteredvblock);
1572 break; 1572 break;
1573 } 1573 }
1574 *entry = backup; 1574 *entry = backup;
1575 memcpy((*entry).pageoffsets, ftl_offsets_backup, 0x400); 1575 memcpy(entry->pageoffsets, ftl_offsets_backup, 0x400);
1576 } 1576 }
1577 return error; 1577 return error;
1578} 1578}
@@ -1590,15 +1590,15 @@ uint32_t ftl_commit_scattered(struct ftl_log_type* entry)
1590 { 1590 {
1591 block = ftl_allocate_pool_block(); 1591 block = ftl_allocate_pool_block();
1592 if (block == 0xFFFFFFFF) return 1; 1592 if (block == 0xFFFFFFFF) return 1;
1593 error = ftl_copy_block((*entry).logicalvblock, block); 1593 error = ftl_copy_block(entry->logicalvblock, block);
1594 if (error == 0) break; 1594 if (error == 0) break;
1595 ftl_release_pool_block(block); 1595 ftl_release_pool_block(block);
1596 } 1596 }
1597 if (error != 0) return 1; 1597 if (error != 0) return 1;
1598 ftl_release_pool_block((*entry).scatteredvblock); 1598 ftl_release_pool_block(entry->scatteredvblock);
1599 (*entry).scatteredvblock = 0xFFFF; 1599 entry->scatteredvblock = 0xFFFF;
1600 ftl_release_pool_block(ftl_map[(*entry).logicalvblock]); 1600 ftl_release_pool_block(ftl_map[entry->logicalvblock]);
1601 ftl_map[(*entry).logicalvblock] = block; 1601 ftl_map[entry->logicalvblock] = block;
1602 return 0; 1602 return 0;
1603} 1603}
1604#endif 1604#endif
@@ -1612,21 +1612,21 @@ uint32_t ftl_commit_scattered(struct ftl_log_type* entry)
1612uint32_t ftl_commit_sequential(struct ftl_log_type* entry) 1612uint32_t ftl_commit_sequential(struct ftl_log_type* entry)
1613{ 1613{
1614 uint32_t i; 1614 uint32_t i;
1615 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1615 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1616 1616
1617 if ((*entry).issequential != 1 1617 if (entry->issequential != 1
1618 || (*entry).pagescurrent != (*entry).pagesused) 1618 || entry->pagescurrent != entry->pagesused)
1619 return 1; 1619 return 1;
1620 1620
1621 for (; (*entry).pagesused < ppb; ) 1621 for (; entry->pagesused < ppb; )
1622 { 1622 {
1623 uint32_t lpn = (*entry).logicalvblock * ppb + (*entry).pagesused; 1623 uint32_t lpn = entry->logicalvblock * ppb + entry->pagesused;
1624 uint32_t newpage = (*entry).scatteredvblock * ppb 1624 uint32_t newpage = entry->scatteredvblock * ppb
1625 + (*entry).pagesused; 1625 + entry->pagesused;
1626 uint32_t count = FTL_COPYBUF_SIZE < ppb - (*entry).pagesused 1626 uint32_t count = FTL_COPYBUF_SIZE < ppb - entry->pagesused
1627 ? FTL_COPYBUF_SIZE : ppb - (*entry).pagesused; 1627 ? FTL_COPYBUF_SIZE : ppb - entry->pagesused;
1628 for (i = 0; i < count; i++) 1628 for (i = 0; i < count; i++)
1629 if ((*entry).pageoffsets[(*entry).pagesused + i] != 0xFFFF) 1629 if (entry->pageoffsets[entry->pagesused + i] != 0xFFFF)
1630 return ftl_commit_scattered(entry); 1630 return ftl_commit_scattered(entry);
1631 uint32_t rc = ftl_read(lpn, count, ftl_copybuffer[0]); 1631 uint32_t rc = ftl_read(lpn, count, ftl_copybuffer[0]);
1632 memset(&ftl_copyspare[0], 0xFF, 0x40 * FTL_COPYBUF_SIZE); 1632 memset(&ftl_copyspare[0], 0xFF, 0x40 * FTL_COPYBUF_SIZE);
@@ -1636,16 +1636,16 @@ uint32_t ftl_commit_sequential(struct ftl_log_type* entry)
1636 ftl_copyspare[i].user.usn = ++ftl_cxt.nextblockusn; 1636 ftl_copyspare[i].user.usn = ++ftl_cxt.nextblockusn;
1637 ftl_copyspare[i].user.type = 0x40; 1637 ftl_copyspare[i].user.type = 0x40;
1638 if (rc) ftl_copyspare[i].user.eccmark = 0x55; 1638 if (rc) ftl_copyspare[i].user.eccmark = 0x55;
1639 if ((*entry).pagesused + i == ppb - 1) 1639 if (entry->pagesused + i == ppb - 1)
1640 ftl_copyspare[i].user.type = 0x41; 1640 ftl_copyspare[i].user.type = 0x41;
1641 } 1641 }
1642 if (ftl_vfl_write(newpage, count, ftl_copybuffer[0], &ftl_copyspare[0])) 1642 if (ftl_vfl_write(newpage, count, ftl_copybuffer[0], &ftl_copyspare[0]))
1643 return ftl_commit_scattered(entry); 1643 return ftl_commit_scattered(entry);
1644 (*entry).pagesused += count; 1644 entry->pagesused += count;
1645 } 1645 }
1646 ftl_release_pool_block(ftl_map[(*entry).logicalvblock]); 1646 ftl_release_pool_block(ftl_map[entry->logicalvblock]);
1647 ftl_map[(*entry).logicalvblock] = (*entry).scatteredvblock; 1647 ftl_map[entry->logicalvblock] = entry->scatteredvblock;
1648 (*entry).scatteredvblock = 0xFFFF; 1648 entry->scatteredvblock = 0xFFFF;
1649 return 0; 1649 return 0;
1650} 1650}
1651#endif 1651#endif
@@ -1658,7 +1658,7 @@ uint32_t ftl_commit_sequential(struct ftl_log_type* entry)
1658uint32_t ftl_remove_scattered_block(struct ftl_log_type* entry) 1658uint32_t ftl_remove_scattered_block(struct ftl_log_type* entry)
1659{ 1659{
1660 uint32_t i; 1660 uint32_t i;
1661 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1661 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1662 uint32_t age = 0xFFFFFFFF, used = 0; 1662 uint32_t age = 0xFFFFFFFF, used = 0;
1663 if (entry == (struct ftl_log_type*)0) 1663 if (entry == (struct ftl_log_type*)0)
1664 { 1664 {
@@ -1677,13 +1677,13 @@ uint32_t ftl_remove_scattered_block(struct ftl_log_type* entry)
1677 } 1677 }
1678 if (entry == (struct ftl_log_type*)0) return 1; 1678 if (entry == (struct ftl_log_type*)0) return 1;
1679 } 1679 }
1680 else if ((*entry).pagescurrent < ppb / 2) 1680 else if (entry->pagescurrent < ppb / 2)
1681 { 1681 {
1682 ftl_cxt.swapcounter++; 1682 ftl_cxt.swapcounter++;
1683 return ftl_compact_scattered(entry); 1683 return ftl_compact_scattered(entry);
1684 } 1684 }
1685 ftl_cxt.swapcounter++; 1685 ftl_cxt.swapcounter++;
1686 if ((*entry).issequential == 1) return ftl_commit_sequential(entry); 1686 if (entry->issequential == 1) return ftl_commit_sequential(entry);
1687 else return ftl_commit_scattered(entry); 1687 else return ftl_commit_scattered(entry);
1688} 1688}
1689#endif 1689#endif
@@ -1693,10 +1693,10 @@ uint32_t ftl_remove_scattered_block(struct ftl_log_type* entry)
1693/* Initialize a log entry to the values for an empty scattered page block */ 1693/* Initialize a log entry to the values for an empty scattered page block */
1694void ftl_init_log_entry(struct ftl_log_type* entry) 1694void ftl_init_log_entry(struct ftl_log_type* entry)
1695{ 1695{
1696 (*entry).issequential = 1; 1696 entry->issequential = 1;
1697 (*entry).pagescurrent = 0; 1697 entry->pagescurrent = 0;
1698 (*entry).pagesused = 0; 1698 entry->pagesused = 0;
1699 memset((*entry).pageoffsets, 0xFF, 0x400); 1699 memset(entry->pageoffsets, 0xFF, 0x400);
1700} 1700}
1701#endif 1701#endif
1702 1702
@@ -1708,7 +1708,7 @@ struct ftl_log_type* ftl_allocate_log_entry(uint32_t block)
1708{ 1708{
1709 uint32_t i; 1709 uint32_t i;
1710 struct ftl_log_type* entry = ftl_get_log_entry(block); 1710 struct ftl_log_type* entry = ftl_get_log_entry(block);
1711 (*entry).usn = ftl_cxt.nextblockusn - 1; 1711 entry->usn = ftl_cxt.nextblockusn - 1;
1712 if (entry != (struct ftl_log_type*)0) return entry; 1712 if (entry != (struct ftl_log_type*)0) return entry;
1713 1713
1714 for (i = 0; i < 0x11; i++) 1714 for (i = 0; i < 0x11; i++)
@@ -1728,15 +1728,15 @@ struct ftl_log_type* ftl_allocate_log_entry(uint32_t block)
1728 if (ftl_remove_scattered_block((struct ftl_log_type*)0) != 0) 1728 if (ftl_remove_scattered_block((struct ftl_log_type*)0) != 0)
1729 return (struct ftl_log_type*)0; 1729 return (struct ftl_log_type*)0;
1730 entry = ftl_log; 1730 entry = ftl_log;
1731 while ((*entry).scatteredvblock != 0xFFFF) entry = &entry[1]; 1731 while (entry->scatteredvblock != 0xFFFF) entry = &entry[1];
1732 (*entry).scatteredvblock = ftl_allocate_pool_block(); 1732 entry->scatteredvblock = ftl_allocate_pool_block();
1733 if ((*entry).scatteredvblock == 0xFFFF) 1733 if (entry->scatteredvblock == 0xFFFF)
1734 return (struct ftl_log_type*)0; 1734 return (struct ftl_log_type*)0;
1735 } 1735 }
1736 1736
1737 ftl_init_log_entry(entry); 1737 ftl_init_log_entry(entry);
1738 (*entry).logicalvblock = block; 1738 entry->logicalvblock = block;
1739 (*entry).usn = ftl_cxt.nextblockusn - 1; 1739 entry->usn = ftl_cxt.nextblockusn - 1;
1740 1740
1741 return entry; 1741 return entry;
1742} 1742}
@@ -1748,9 +1748,9 @@ struct ftl_log_type* ftl_allocate_log_entry(uint32_t block)
1748uint32_t ftl_commit_cxt(void) 1748uint32_t ftl_commit_cxt(void)
1749{ 1749{
1750 uint32_t i; 1750 uint32_t i;
1751 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1751 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1752 uint32_t mappages = ((*ftl_nand_type).userblocks + 0x3ff) >> 10; 1752 uint32_t mappages = (ftl_nand_type->userblocks + 0x3ff) >> 10;
1753 uint32_t ctrpages = ((*ftl_nand_type).userblocks + 23 + 0x3ff) >> 10; 1753 uint32_t ctrpages = (ftl_nand_type->userblocks + 23 + 0x3ff) >> 10;
1754 uint32_t endpage = ftl_cxt.ftlctrlpage + mappages + ctrpages + 1; 1754 uint32_t endpage = ftl_cxt.ftlctrlpage + mappages + ctrpages + 1;
1755 if (endpage >= (ftl_cxt.ftlctrlpage / ppb + 1) * ppb) 1755 if (endpage >= (ftl_cxt.ftlctrlpage / ppb + 1) * ppb)
1756 ftl_cxt.ftlctrlpage |= ppb - 1; 1756 ftl_cxt.ftlctrlpage |= ppb - 1;
@@ -1804,7 +1804,7 @@ uint32_t ftl_swap_blocks(void)
1804 } 1804 }
1805 } 1805 }
1806 if (maxidx == 0x14) return 0; 1806 if (maxidx == 0x14) return 0;
1807 for (i = 0; i < (*ftl_nand_type).userblocks; i++) 1807 for (i = 0; i < ftl_nand_type->userblocks; i++)
1808 { 1808 {
1809 if (ftl_erasectr[ftl_map[i]] > max) max = ftl_erasectr[ftl_map[i]]; 1809 if (ftl_erasectr[ftl_map[i]] > max) max = ftl_erasectr[ftl_map[i]];
1810 if (ftl_get_log_entry(i) != (struct ftl_log_type*)0) continue; 1810 if (ftl_get_log_entry(i) != (struct ftl_log_type*)0) continue;
@@ -1831,9 +1831,9 @@ uint32_t ftl_swap_blocks(void)
1831uint32_t ftl_write(uint32_t sector, uint32_t count, const void* buffer) 1831uint32_t ftl_write(uint32_t sector, uint32_t count, const void* buffer)
1832{ 1832{
1833 uint32_t i, j, k; 1833 uint32_t i, j, k;
1834 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1834 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1835 1835
1836 if (sector + count > (*ftl_nand_type).userblocks * ppb) 1836 if (sector + count > ftl_nand_type->userblocks * ppb)
1837 return 1; 1837 return 1;
1838 1838
1839 if (count == 0) return 0; 1839 if (count == 0) return 0;
@@ -1878,9 +1878,9 @@ uint32_t ftl_write(uint32_t sector, uint32_t count, const void* buffer)
1878 } 1878 }
1879 if (page == 0 && count - i >= ppb) 1879 if (page == 0 && count - i >= ppb)
1880 { 1880 {
1881 uint32_t vblock = (*logentry).scatteredvblock; 1881 uint32_t vblock = logentry->scatteredvblock;
1882 (*logentry).scatteredvblock = 0xFFFF; 1882 logentry->scatteredvblock = 0xFFFF;
1883 if ((*logentry).pagesused != 0) 1883 if (logentry->pagesused != 0)
1884 { 1884 {
1885 ftl_release_pool_block(vblock); 1885 ftl_release_pool_block(vblock);
1886 vblock = ftl_allocate_pool_block(); 1886 vblock = ftl_allocate_pool_block();
@@ -1919,7 +1919,7 @@ uint32_t ftl_write(uint32_t sector, uint32_t count, const void* buffer)
1919 } 1919 }
1920 else 1920 else
1921 { 1921 {
1922 if ((*logentry).pagesused == ppb) 1922 if (logentry->pagesused == ppb)
1923 { 1923 {
1924 ftl_remove_scattered_block(logentry); 1924 ftl_remove_scattered_block(logentry);
1925 logentry = ftl_allocate_log_entry(block); 1925 logentry = ftl_allocate_log_entry(block);
@@ -1931,7 +1931,7 @@ uint32_t ftl_write(uint32_t sector, uint32_t count, const void* buffer)
1931 } 1931 }
1932 uint32_t cnt = FTL_WRITESPARE_SIZE; 1932 uint32_t cnt = FTL_WRITESPARE_SIZE;
1933 if (cnt > count - i) cnt = count - i; 1933 if (cnt > count - i) cnt = count - i;
1934 if (cnt > ppb - (*logentry).pagesused) cnt = ppb - (*logentry).pagesused; 1934 if (cnt > ppb - logentry->pagesused) cnt = ppb - logentry->pagesused;
1935 if (cnt > ppb - page) cnt = ppb - page; 1935 if (cnt > ppb - page) cnt = ppb - page;
1936 memset(&ftl_sparebuffer[0], 0xFF, 0x40 * cnt); 1936 memset(&ftl_sparebuffer[0], 0xFF, 0x40 * cnt);
1937 for (j = 0; j < cnt; j++) 1937 for (j = 0; j < cnt; j++)
@@ -1939,30 +1939,30 @@ uint32_t ftl_write(uint32_t sector, uint32_t count, const void* buffer)
1939 ftl_sparebuffer[j].user.lpn = sector + i + j; 1939 ftl_sparebuffer[j].user.lpn = sector + i + j;
1940 ftl_sparebuffer[j].user.usn = ++ftl_cxt.nextblockusn; 1940 ftl_sparebuffer[j].user.usn = ++ftl_cxt.nextblockusn;
1941 ftl_sparebuffer[j].user.type = 0x40; 1941 ftl_sparebuffer[j].user.type = 0x40;
1942 if ((*logentry).pagesused + j == ppb - 1 && (*logentry).issequential) 1942 if (logentry->pagesused + j == ppb - 1 && logentry->issequential)
1943 ftl_sparebuffer[j].user.type = 0x41; 1943 ftl_sparebuffer[j].user.type = 0x41;
1944 } 1944 }
1945 uint32_t abspage = (*logentry).scatteredvblock * ppb 1945 uint32_t abspage = logentry->scatteredvblock * ppb
1946 + (*logentry).pagesused; 1946 + logentry->pagesused;
1947 (*logentry).pagesused += cnt; 1947 logentry->pagesused += cnt;
1948 if (ftl_vfl_write(abspage, cnt, &((uint8_t*)buffer)[i << 11], 1948 if (ftl_vfl_write(abspage, cnt, &((uint8_t*)buffer)[i << 11],
1949 &ftl_sparebuffer[0]) == 0) 1949 &ftl_sparebuffer[0]) == 0)
1950 { 1950 {
1951 for (j = 0; j < cnt; j++) 1951 for (j = 0; j < cnt; j++)
1952 { 1952 {
1953 if ((*logentry).pageoffsets[page + j] == 0xFFFF) 1953 if (logentry->pageoffsets[page + j] == 0xFFFF)
1954 (*logentry).pagescurrent++; 1954 logentry->pagescurrent++;
1955 (*logentry).pageoffsets[page + j] = (*logentry).pagesused - cnt + j; 1955 logentry->pageoffsets[page + j] = logentry->pagesused - cnt + j;
1956 if ((*logentry).pagesused - cnt + j + 1 != (*logentry).pagescurrent 1956 if (logentry->pagesused - cnt + j + 1 != logentry->pagescurrent
1957 || (*logentry).pageoffsets[page + j] != page + j) 1957 || logentry->pageoffsets[page + j] != page + j)
1958 (*logentry).issequential = 0; 1958 logentry->issequential = 0;
1959 } 1959 }
1960 i += cnt; 1960 i += cnt;
1961 } 1961 }
1962 else panicf("FTL: Write error: %u %u %u!", 1962 else panicf("FTL: Write error: %u %u %u!",
1963 (unsigned)sector, (unsigned)count, (unsigned)i); 1963 (unsigned)sector, (unsigned)count, (unsigned)i);
1964 } 1964 }
1965 if ((*logentry).pagesused == ppb) ftl_remove_scattered_block(logentry); 1965 if (logentry->pagesused == ppb) ftl_remove_scattered_block(logentry);
1966 } 1966 }
1967 if (ftl_cxt.swapcounter >= 300) 1967 if (ftl_cxt.swapcounter >= 300)
1968 { 1968 {
@@ -1993,7 +1993,7 @@ uint32_t ftl_sync(void)
1993{ 1993{
1994 uint32_t i; 1994 uint32_t i;
1995 uint32_t rc = 0; 1995 uint32_t rc = 0;
1996 uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; 1996 uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
1997 if (ftl_cxt.clean_flag == 1) return 0; 1997 if (ftl_cxt.clean_flag == 1) return 0;
1998 1998
1999 mutex_lock(&ftl_mtx); 1999 mutex_lock(&ftl_mtx);
@@ -2050,7 +2050,7 @@ uint32_t ftl_init(void)
2050 foundsignature = 0; 2050 foundsignature = 0;
2051 blockwiped = 1; 2051 blockwiped = 1;
2052 mutex_unlock(&ftl_mtx); 2052 mutex_unlock(&ftl_mtx);
2053 for (i = 0; i < (*ftl_nand_type).pagesperblock; i++) 2053 for (i = 0; i < ftl_nand_type->pagesperblock; i++)
2054 { 2054 {
2055 result = nand_read_page(0, i, ftl_buffer, (uint32_t*)0, 1, 1); 2055 result = nand_read_page(0, i, ftl_buffer, (uint32_t*)0, 1, 1);
2056 if ((result & 0x11F) == 0) 2056 if ((result & 0x11F) == 0)