| Index: embios/trunk/init.c |
| — | — | @@ -34,21 +34,35 @@ |
| 35 | 35 | #include "usb/usb.h"
|
| 36 | 36 |
|
| 37 | 37 | static const char welcomestring[] INITCONST_ATTR = "emBIOS v" VERSION " r" VERSION_SVN "\n\n";
|
| | 38 | +static const char initthreadname[] INITCONST_ATTR = "Initialisation thread";
|
| | 39 | +static uint32_t initstack[0x400] INITBSS_ATTR;
|
| 38 | 40 |
|
| 39 | | -void init() INITCODE_ATTR;
|
| 40 | | -void init()
|
| | 41 | +void initthread() INITCODE_ATTR;
|
| | 42 | +void initthread()
|
| 41 | 43 | {
|
| 42 | | - scheduler_init();
|
| 43 | | - console_init();
|
| 44 | | - lcd_init();
|
| 45 | | - lcdconsole_init();
|
| 46 | | - interrupt_init();
|
| 47 | 44 | cputs(1, welcomestring);
|
| 48 | 45 | i2c_init();
|
| 49 | 46 | power_init();
|
| 50 | 47 | usb_init();
|
| | 48 | + DEBUGF("Initializing storage drivers...");
|
| 51 | 49 | storage_init();
|
| | 50 | + DEBUGF("Initializing storage subsystem...");
|
| 52 | 51 | disk_init_subsystem();
|
| | 52 | + DEBUGF("Reading partition tables...");
|
| 53 | 53 | disk_init();
|
| | 54 | + DEBUGF("Mounting partitions...");
|
| 54 | 55 | disk_mount_all();
|
| 55 | | -} |
| \ No newline at end of file |
| | 56 | + DEBUGF("Finished initialisation sequence");
|
| | 57 | +}
|
| | 58 | +
|
| | 59 | +void init() INITCODE_ATTR;
|
| | 60 | +void init()
|
| | 61 | +{
|
| | 62 | + scheduler_init();
|
| | 63 | + console_init();
|
| | 64 | + lcd_init();
|
| | 65 | + lcdconsole_init();
|
| | 66 | + interrupt_init();
|
| | 67 | + thread_create(initthreadname, initthread, initstack,
|
| | 68 | + sizeof(initstack), USER_THREAD, 127, true);
|
| | 69 | +}
|
| Index: embios/trunk/target/ipodnano2g/nand.c |
| — | — | @@ -78,15 +78,15 @@ |
| 79 | 79 | {0xA555D520, 8192, 3872, 0x80, 7, 2, 1, 2, 1}
|
| 80 | 80 | };
|
| 81 | 81 |
|
| 82 | | -uint8_t nand_tunk1[4];
|
| 83 | | -uint8_t nand_twp[4];
|
| 84 | | -uint8_t nand_tunk2[4];
|
| 85 | | -uint8_t nand_tunk3[4];
|
| 86 | | -int nand_type[4];
|
| 87 | | -int nand_powered = 0;
|
| 88 | | -int nand_interleaved = 0;
|
| 89 | | -int nand_cached = 0;
|
| 90 | | -long nand_last_activity_value = -1;
|
| | 82 | +static uint8_t nand_tunk1[4];
|
| | 83 | +static uint8_t nand_twp[4];
|
| | 84 | +static uint8_t nand_tunk2[4];
|
| | 85 | +static uint8_t nand_tunk3[4];
|
| | 86 | +static int nand_type[4];
|
| | 87 | +static int nand_powered = 0;
|
| | 88 | +static int nand_interleaved = 0;
|
| | 89 | +static int nand_cached = 0;
|
| | 90 | +static long nand_last_activity_value = -1;
|
| 91 | 91 | static uint32_t nand_stack[0x80];
|
| 92 | 92 |
|
| 93 | 93 | static struct mutex nand_mtx;
|
| — | — | @@ -100,7 +100,7 @@ |
| 101 | 101 | static uint8_t nand_ecc[0x30] CACHEALIGN_ATTR;
|
| 102 | 102 |
|
| 103 | 103 |
|
| 104 | | -uint32_t nand_unlock(uint32_t rc)
|
| | 104 | +static uint32_t nand_unlock(uint32_t rc)
|
| 105 | 105 | {
|
| 106 | 106 | nand_last_activity_value = USEC_TIMER;
|
| 107 | 107 | mutex_unlock(&nand_mtx);
|
| — | — | @@ -107,13 +107,13 @@ |
| 108 | 108 | return rc;
|
| 109 | 109 | }
|
| 110 | 110 |
|
| 111 | | -uint32_t ecc_unlock(uint32_t rc)
|
| | 111 | +static uint32_t ecc_unlock(uint32_t rc)
|
| 112 | 112 | {
|
| 113 | 113 | mutex_unlock(&ecc_mtx);
|
| 114 | 114 | return rc;
|
| 115 | 115 | }
|
| 116 | 116 |
|
| 117 | | -uint32_t nand_timeout(uint32_t timeout)
|
| | 117 | +static uint32_t nand_timeout(long timeout)
|
| 118 | 118 | {
|
| 119 | 119 | if (TIME_AFTER(USEC_TIMER, timeout)) return 1;
|
| 120 | 120 | else
|
| — | — | @@ -123,7 +123,7 @@ |
| 124 | 124 | }
|
| 125 | 125 | }
|
| 126 | 126 |
|
| 127 | | -uint32_t nand_wait_rbbdone(void)
|
| | 127 | +static uint32_t nand_wait_rbbdone(void)
|
| 128 | 128 | {
|
| 129 | 129 | uint32_t timeout = USEC_TIMER + 20000;
|
| 130 | 130 | while (!(FMCSTAT & FMCSTAT_RBBDONE))
|
| — | — | @@ -132,7 +132,7 @@ |
| 133 | 133 | return 0;
|
| 134 | 134 | }
|
| 135 | 135 |
|
| 136 | | -uint32_t nand_wait_cmddone(void)
|
| | 136 | +static uint32_t nand_wait_cmddone(void)
|
| 137 | 137 | {
|
| 138 | 138 | uint32_t timeout = USEC_TIMER + 20000;
|
| 139 | 139 | while (!(FMCSTAT & FMCSTAT_CMDDONE))
|
| — | — | @@ -141,7 +141,7 @@ |
| 142 | 142 | return 0;
|
| 143 | 143 | }
|
| 144 | 144 |
|
| 145 | | -uint32_t nand_wait_addrdone(void)
|
| | 145 | +static uint32_t nand_wait_addrdone(void)
|
| 146 | 146 | {
|
| 147 | 147 | uint32_t timeout = USEC_TIMER + 20000;
|
| 148 | 148 | while (!(FMCSTAT & FMCSTAT_ADDRDONE))
|
| — | — | @@ -150,7 +150,7 @@ |
| 151 | 151 | return 0;
|
| 152 | 152 | }
|
| 153 | 153 |
|
| 154 | | -uint32_t nand_wait_chip_ready(uint32_t bank)
|
| | 154 | +static uint32_t nand_wait_chip_ready(uint32_t bank)
|
| 155 | 155 | {
|
| 156 | 156 | uint32_t timeout = USEC_TIMER + 20000;
|
| 157 | 157 | while (!(FMCSTAT & (FMCSTAT_BANK0READY << bank)))
|
| — | — | @@ -159,19 +159,19 @@ |
| 160 | 160 | return 0;
|
| 161 | 161 | }
|
| 162 | 162 |
|
| 163 | | -void nand_set_fmctrl0(uint32_t bank, uint32_t flags)
|
| | 163 | +static void nand_set_fmctrl0(uint32_t bank, uint32_t flags)
|
| 164 | 164 | {
|
| 165 | 165 | FMCTRL0 = (nand_tunk1[bank] << 16) | (nand_twp[bank] << 12)
|
| 166 | 166 | | (1 << 11) | 1 | (1 << (bank + 1)) | flags;
|
| 167 | 167 | }
|
| 168 | 168 |
|
| 169 | | -uint32_t nand_send_cmd(uint32_t cmd)
|
| | 169 | +static uint32_t nand_send_cmd(uint32_t cmd)
|
| 170 | 170 | {
|
| 171 | 171 | FMCMD = cmd;
|
| 172 | 172 | return nand_wait_rbbdone();
|
| 173 | 173 | }
|
| 174 | 174 |
|
| 175 | | -uint32_t nand_send_address(uint32_t page, uint32_t offset)
|
| | 175 | +static uint32_t nand_send_address(uint32_t page, uint32_t offset)
|
| 176 | 176 | {
|
| 177 | 177 | FMANUM = 4;
|
| 178 | 178 | FMADDR0 = (page << 16) | offset;
|
| — | — | @@ -190,7 +190,7 @@ |
| 191 | 191 | return 0;
|
| 192 | 192 | }
|
| 193 | 193 |
|
| 194 | | -uint32_t nand_wait_status_ready(uint32_t bank)
|
| | 194 | +static uint32_t nand_wait_status_ready(uint32_t bank)
|
| 195 | 195 | {
|
| 196 | 196 | uint32_t timeout = USEC_TIMER + 20000;
|
| 197 | 197 | nand_set_fmctrl0(bank, 0);
|
| — | — | @@ -211,8 +211,8 @@ |
| 212 | 212 | return nand_send_cmd(NAND_CMD_READ);
|
| 213 | 213 | }
|
| 214 | 214 |
|
| 215 | | -void nand_transfer_data_start(uint32_t bank, uint32_t direction,
|
| 216 | | - void* buffer, uint32_t size)
|
| | 215 | +static void nand_transfer_data_start(uint32_t bank, uint32_t direction,
|
| | 216 | + void* buffer, uint32_t size)
|
| 217 | 217 | {
|
| 218 | 218 | nand_set_fmctrl0(bank, FMCTRL0_ENABLEDMA);
|
| 219 | 219 | FMDNUM = size - 1;
|
| — | — | @@ -229,7 +229,7 @@ |
| 230 | 230 | DMACOM3 = 4;
|
| 231 | 231 | }
|
| 232 | 232 |
|
| 233 | | -uint32_t nand_transfer_data_collect(uint32_t direction)
|
| | 233 | +static uint32_t nand_transfer_data_collect(uint32_t direction)
|
| 234 | 234 | {
|
| 235 | 235 | uint32_t timeout = USEC_TIMER + 20000;
|
| 236 | 236 | while ((DMAALLST & DMAALLST_DMABUSY3))
|
| — | — | @@ -241,8 +241,8 @@ |
| 242 | 242 | return 0;
|
| 243 | 243 | }
|
| 244 | 244 |
|
| 245 | | -uint32_t nand_transfer_data(uint32_t bank, uint32_t direction,
|
| 246 | | - void* buffer, uint32_t size)
|
| | 245 | +static uint32_t nand_transfer_data(uint32_t bank, uint32_t direction,
|
| | 246 | + void* buffer, uint32_t size)
|
| 247 | 247 | {
|
| 248 | 248 | nand_transfer_data_start(bank, direction, buffer, size);
|
| 249 | 249 | uint32_t rc = nand_transfer_data_collect(direction);
|
| — | — | @@ -249,7 +249,8 @@ |
| 250 | 250 | return rc;
|
| 251 | 251 | }
|
| 252 | 252 |
|
| 253 | | -void ecc_start(uint32_t size, void* databuffer, void* sparebuffer, uint32_t type)
|
| | 253 | +static void ecc_start(uint32_t size, void* databuffer, void* sparebuffer,
|
| | 254 | + uint32_t type)
|
| 254 | 255 | {
|
| 255 | 256 | mutex_lock(&ecc_mtx, TIMEOUT_BLOCK);
|
| 256 | 257 | ECC_INT_CLR = 1;
|
| — | — | @@ -261,7 +262,7 @@ |
| 262 | 263 | ECC_CTRL = type;
|
| 263 | 264 | }
|
| 264 | 265 |
|
| 265 | | -uint32_t ecc_collect(void)
|
| | 266 | +static uint32_t ecc_collect(void)
|
| 266 | 267 | {
|
| 267 | 268 | uint32_t timeout = USEC_TIMER + 20000;
|
| 268 | 269 | while (!(SRCPND & INTMSK_ECC))
|
| — | — | @@ -272,7 +273,7 @@ |
| 273 | 274 | return ecc_unlock(ECC_RESULT);
|
| 274 | 275 | }
|
| 275 | 276 |
|
| 276 | | -uint32_t ecc_decode(uint32_t size, void* databuffer, void* sparebuffer)
|
| | 277 | +static uint32_t ecc_decode(uint32_t size, void* databuffer, void* sparebuffer)
|
| 277 | 278 | {
|
| 278 | 279 | ecc_start(size, databuffer, sparebuffer, ECCCTRL_STARTDECODING);
|
| 279 | 280 | uint32_t rc = ecc_collect();
|
| — | — | @@ -279,7 +280,7 @@ |
| 280 | 281 | return rc;
|
| 281 | 282 | }
|
| 282 | 283 |
|
| 283 | | -uint32_t ecc_encode(uint32_t size, void* databuffer, void* sparebuffer)
|
| | 284 | +static uint32_t ecc_encode(uint32_t size, void* databuffer, void* sparebuffer)
|
| 284 | 285 | {
|
| 285 | 286 | ecc_start(size, databuffer, sparebuffer, ECCCTRL_STARTENCODING);
|
| 286 | 287 | ecc_collect();
|
| — | — | @@ -286,7 +287,7 @@ |
| 287 | 288 | return 0;
|
| 288 | 289 | }
|
| 289 | 290 |
|
| 290 | | -uint32_t nand_check_empty(uint8_t* buffer)
|
| | 291 | +static uint32_t nand_check_empty(uint8_t* buffer)
|
| 291 | 292 | {
|
| 292 | 293 | uint32_t i, count;
|
| 293 | 294 | count = 0;
|
| — | — | @@ -295,7 +296,7 @@ |
| 296 | 297 | return 0;
|
| 297 | 298 | }
|
| 298 | 299 |
|
| 299 | | -uint32_t nand_get_chip_type(uint32_t bank)
|
| | 300 | +static uint32_t nand_get_chip_type(uint32_t bank)
|
| 300 | 301 | {
|
| 301 | 302 | mutex_lock(&nand_mtx, TIMEOUT_BLOCK);
|
| 302 | 303 | uint32_t result;
|
| — | — | @@ -431,8 +432,9 @@ |
| 432 | 433 | return nand_unlock(rc);
|
| 433 | 434 | }
|
| 434 | 435 |
|
| 435 | | -uint32_t nand_write_page_int(uint32_t bank, uint32_t page, void* databuffer,
|
| 436 | | - void* sparebuffer, uint32_t doecc, uint32_t wait)
|
| | 436 | +static uint32_t nand_write_page_int(uint32_t bank, uint32_t page,
|
| | 437 | + void* databuffer, void* sparebuffer,
|
| | 438 | + uint32_t doecc, uint32_t wait)
|
| 437 | 439 | {
|
| 438 | 440 | uint8_t* data = nand_data;
|
| 439 | 441 | uint8_t* spare = nand_spare;
|
| — | — | @@ -658,7 +660,7 @@ |
| 659 | 661 | return nand_wait_status_ready(bank);
|
| 660 | 662 | }
|
| 661 | 663 |
|
| 662 | | -uint32_t nand_block_erase_fast(uint32_t page)
|
| | 664 | +static uint32_t nand_block_erase_fast(uint32_t page)
|
| 663 | 665 | {
|
| 664 | 666 | uint32_t i, rc = 0;
|
| 665 | 667 | mutex_lock(&nand_mtx, TIMEOUT_BLOCK);
|
| Index: embios/trunk/target/ipodnano2g/ftl.c |
| — | — | @@ -362,54 +362,54 @@ |
| 363 | 363 | uint32_t ftl_banks;
|
| 364 | 364 |
|
| 365 | 365 | /* Block map, used vor pBlock to vBlock mapping */
|
| 366 | | -uint16_t ftl_map[0x2000];
|
| | 366 | +static uint16_t ftl_map[0x2000];
|
| 367 | 367 |
|
| 368 | 368 | /* VFL context for each bank */
|
| 369 | | -struct ftl_vfl_cxt_type ftl_vfl_cxt[4];
|
| | 369 | +static struct ftl_vfl_cxt_type ftl_vfl_cxt[4];
|
| 370 | 370 |
|
| 371 | 371 | /* FTL context */
|
| 372 | | -struct ftl_cxt_type ftl_cxt;
|
| | 372 | +static struct ftl_cxt_type ftl_cxt;
|
| 373 | 373 |
|
| 374 | 374 | /* Temporary data buffers for internal use by the FTL */
|
| 375 | | -uint8_t ftl_buffer[0x800] CACHEALIGN_ATTR;
|
| | 375 | +static uint8_t ftl_buffer[0x800] CACHEALIGN_ATTR;
|
| 376 | 376 |
|
| 377 | 377 | /* Temporary spare byte buffer for internal use by the FTL */
|
| 378 | | -union ftl_spare_data_type ftl_sparebuffer[FTL_WRITESPARE_SIZE] CACHEALIGN_ATTR;
|
| | 378 | +static union ftl_spare_data_type ftl_sparebuffer[FTL_WRITESPARE_SIZE] CACHEALIGN_ATTR;
|
| 379 | 379 |
|
| 380 | 380 |
|
| 381 | 381 | #ifndef FTL_READONLY
|
| 382 | 382 |
|
| 383 | 383 | /* Lowlevel BBT for each bank */
|
| 384 | | -uint8_t ftl_bbt[4][0x410];
|
| | 384 | +static uint8_t ftl_bbt[4][0x410];
|
| 385 | 385 |
|
| 386 | 386 | /* Erase counters for the vBlocks */
|
| 387 | | -uint16_t ftl_erasectr[0x2000];
|
| | 387 | +static uint16_t ftl_erasectr[0x2000];
|
| 388 | 388 |
|
| 389 | 389 | /* Used by ftl_log */
|
| 390 | | -uint16_t ftl_offsets[0x11][0x200];
|
| | 390 | +static uint16_t ftl_offsets[0x11][0x200];
|
| 391 | 391 |
|
| 392 | 392 | /* Structs keeping record of scattered page blocks */
|
| 393 | | -struct ftl_log_type ftl_log[0x11];
|
| | 393 | +static struct ftl_log_type ftl_log[0x11];
|
| 394 | 394 |
|
| 395 | 395 | /* Global cross-bank update sequence number of the VFL context */
|
| 396 | | -uint32_t ftl_vfl_usn;
|
| | 396 | +static uint32_t ftl_vfl_usn;
|
| 397 | 397 |
|
| 398 | 398 | /* Keeps track (temporarily) of troublesome blocks */
|
| 399 | | -struct ftl_trouble_type ftl_troublelog[5];
|
| | 399 | +static struct ftl_trouble_type ftl_troublelog[5];
|
| 400 | 400 |
|
| 401 | 401 | /* Counts erase counter page changes, after 100 of them the affected
|
| 402 | 402 | page will be committed to the flash. */
|
| 403 | | -uint8_t ftl_erasectr_dirt[8];
|
| | 403 | +static uint8_t ftl_erasectr_dirt[8];
|
| 404 | 404 |
|
| 405 | 405 | /* Buffer needed for copying pages around while moving or committing blocks.
|
| 406 | 406 | This can't be shared with ftl_buffer, because this one could be overwritten
|
| 407 | 407 | during the copying operation in order to e.g. commit a CXT. */
|
| 408 | | -uint8_t ftl_copybuffer[FTL_COPYBUF_SIZE][0x800] CACHEALIGN_ATTR;
|
| 409 | | -union ftl_spare_data_type ftl_copyspare[FTL_COPYBUF_SIZE] CACHEALIGN_ATTR;
|
| | 408 | +static uint8_t ftl_copybuffer[FTL_COPYBUF_SIZE][0x800] CACHEALIGN_ATTR;
|
| | 409 | +static union ftl_spare_data_type ftl_copyspare[FTL_COPYBUF_SIZE] CACHEALIGN_ATTR;
|
| 410 | 410 |
|
| 411 | 411 | /* Needed to store the old scattered page offsets in order to be able to roll
|
| 412 | 412 | back if something fails while compacting a scattered page block. */
|
| 413 | | -uint16_t ftl_offsets_backup[0x200] CACHEALIGN_ATTR;
|
| | 413 | +static uint16_t ftl_offsets_backup[0x200] CACHEALIGN_ATTR;
|
| 414 | 414 |
|
| 415 | 415 | #endif
|
| 416 | 416 |
|
| — | — | @@ -420,7 +420,7 @@ |
| 421 | 421 |
|
| 422 | 422 | /* Finds a device info page for the specified bank and returns its number.
|
| 423 | 423 | Used to check if one is present, and to read the lowlevel BBT. */
|
| 424 | | -uint32_t ftl_find_devinfo(uint32_t bank)
|
| | 424 | +static uint32_t ftl_find_devinfo(uint32_t bank)
|
| 425 | 425 | {
|
| 426 | 426 | /* Scan the last 10% of the flash for device info pages */
|
| 427 | 427 | uint32_t lowestBlock = ftl_nand_type->blocks
|
| — | — | @@ -444,7 +444,7 @@ |
| 445 | 445 |
|
| 446 | 446 |
|
| 447 | 447 | /* Checks if all banks have proper device info pages */
|
| 448 | | -uint32_t ftl_has_devinfo(void)
|
| | 448 | +static uint32_t ftl_has_devinfo(void)
|
| 449 | 449 | {
|
| 450 | 450 | uint32_t i;
|
| 451 | 451 | for (i = 0; i < ftl_banks; i++) if (ftl_find_devinfo(i) == 0) return 0;
|
| — | — | @@ -454,7 +454,7 @@ |
| 455 | 455 |
|
| 456 | 456 | /* Loads the lowlevel BBT for a bank to the specified buffer.
|
| 457 | 457 | This is based on some cryptic disassembly and not fully understood yet. */
|
| 458 | | -uint32_t ftl_load_bbt(uint32_t bank, uint8_t* bbt)
|
| | 458 | +static uint32_t ftl_load_bbt(uint32_t bank, uint8_t* bbt)
|
| 459 | 459 | {
|
| 460 | 460 | uint32_t i, j;
|
| 461 | 461 | uint32_t pagebase, page = ftl_find_devinfo(bank), page2;
|
| — | — | @@ -488,8 +488,8 @@ |
| 489 | 489 |
|
| 490 | 490 |
|
| 491 | 491 | /* Calculates the checksums for the VFL context page of the specified bank */
|
| 492 | | -void ftl_vfl_calculate_checksum(uint32_t bank,
|
| 493 | | - uint32_t* checksum1, uint32_t* checksum2)
|
| | 492 | +static void ftl_vfl_calculate_checksum(uint32_t bank,
|
| | 493 | + uint32_t* checksum1, uint32_t* checksum2)
|
| 494 | 494 | {
|
| 495 | 495 | uint32_t i;
|
| 496 | 496 | *checksum1 = 0xAABBCCDD;
|
| — | — | @@ -504,7 +504,7 @@ |
| 505 | 505 |
|
| 506 | 506 | /* Checks if the checksums of the VFL context
|
| 507 | 507 | of the specified bank are correct */
|
| 508 | | -uint32_t ftl_vfl_verify_checksum(uint32_t bank)
|
| | 508 | +static uint32_t ftl_vfl_verify_checksum(uint32_t bank)
|
| 509 | 509 | {
|
| 510 | 510 | uint32_t checksum1, checksum2;
|
| 511 | 511 | ftl_vfl_calculate_checksum(bank, &checksum1, &checksum2);
|
| — | — | @@ -519,7 +519,7 @@ |
| 520 | 520 |
|
| 521 | 521 | #ifndef FTL_READONLY
|
| 522 | 522 | /* Updates the checksums of the VFL context of the specified bank */
|
| 523 | | -void ftl_vfl_update_checksum(uint32_t bank)
|
| | 523 | +static void ftl_vfl_update_checksum(uint32_t bank)
|
| 524 | 524 | {
|
| 525 | 525 | ftl_vfl_calculate_checksum(bank, &ftl_vfl_cxt[bank].checksum1,
|
| 526 | 526 | &ftl_vfl_cxt[bank].checksum2);
|
| — | — | @@ -530,7 +530,7 @@ |
| 531 | 531 | #ifndef FTL_READONLY
|
| 532 | 532 | /* Writes 8 copies of the VFL context of the specified bank to flash,
|
| 533 | 533 | and succeeds if at least 4 can be read back properly. */
|
| 534 | | -uint32_t ftl_vfl_store_cxt(uint32_t bank)
|
| | 534 | +static uint32_t ftl_vfl_store_cxt(uint32_t bank)
|
| 535 | 535 | {
|
| 536 | 536 | uint32_t i;
|
| 537 | 537 | ftl_vfl_cxt[bank].updatecount--;
|
| — | — | @@ -574,7 +574,7 @@ |
| 575 | 575 | #ifndef FTL_READONLY
|
| 576 | 576 | /* Commits the VFL context of the specified bank to flash,
|
| 577 | 577 | retries until it works or all available pages have been tried */
|
| 578 | | -uint32_t ftl_vfl_commit_cxt(uint32_t bank)
|
| | 578 | +static uint32_t ftl_vfl_commit_cxt(uint32_t bank)
|
| 579 | 579 | {
|
| 580 | 580 | DEBUGF("FTL: VFL: Committing context on bank %d", bank);
|
| 581 | 581 | if (ftl_vfl_cxt[bank].nextcxtpage + 8 <= ftl_nand_type->pagesperblock)
|
| — | — | @@ -604,7 +604,7 @@ |
| 605 | 605 | /* Returns a pointer to the most recently updated VFL context,
|
| 606 | 606 | used to find out the current FTL context vBlock numbers
|
| 607 | 607 | (planetbeing's "maxthing") */
|
| 608 | | -struct ftl_vfl_cxt_type* ftl_vfl_get_newest_cxt(void)
|
| | 608 | +static struct ftl_vfl_cxt_type* ftl_vfl_get_newest_cxt(void)
|
| 609 | 609 | {
|
| 610 | 610 | uint32_t i, maxusn;
|
| 611 | 611 | struct ftl_vfl_cxt_type* cxt = (struct ftl_vfl_cxt_type*)0;
|
| — | — | @@ -621,7 +621,7 @@ |
| 622 | 622 |
|
| 623 | 623 | /* Checks if the specified pBlock is marked bad in the supplied lowlevel BBT.
|
| 624 | 624 | Only used while mounting the VFL. */
|
| 625 | | -uint32_t ftl_is_good_block(uint8_t* bbt, uint32_t block)
|
| | 625 | +static uint32_t ftl_is_good_block(uint8_t* bbt, uint32_t block)
|
| 626 | 626 | {
|
| 627 | 627 | if ((bbt[block >> 3] & (1 << (block & 7))) == 0) return 0;
|
| 628 | 628 | else return 1;
|
| — | — | @@ -629,7 +629,7 @@ |
| 630 | 630 |
|
| 631 | 631 |
|
| 632 | 632 | /* Checks if the specified vBlock could be remapped */
|
| 633 | | -uint32_t ftl_vfl_is_good_block(uint32_t bank, uint32_t block)
|
| | 633 | +static uint32_t ftl_vfl_is_good_block(uint32_t bank, uint32_t block)
|
| 634 | 634 | {
|
| 635 | 635 | uint8_t bbtentry = ftl_vfl_cxt[bank].bbt[block >> 6];
|
| 636 | 636 | if ((bbtentry & (1 << ((7 - (block >> 3)) & 7))) == 0) return 0;
|
| — | — | @@ -640,7 +640,7 @@ |
| 641 | 641 | #ifndef FTL_READONLY
|
| 642 | 642 | /* Sets or unsets the bad bit of the specified vBlock
|
| 643 | 643 | in the specified bank's VFL context */
|
| 644 | | -void ftl_vfl_set_good_block(uint32_t bank, uint32_t block, uint32_t isgood)
|
| | 644 | +static void ftl_vfl_set_good_block(uint32_t bank, uint32_t block, uint32_t isgood)
|
| 645 | 645 | {
|
| 646 | 646 | uint8_t bit = (1 << ((7 - (block >> 3)) & 7));
|
| 647 | 647 | if (isgood == 1) ftl_vfl_cxt[bank].bbt[block >> 6] |= bit;
|
| — | — | @@ -650,9 +650,9 @@ |
| 651 | 651 |
|
| 652 | 652 |
|
| 653 | 653 | /* Tries to read a VFL context from the specified bank, pBlock and page */
|
| 654 | | -uint32_t ftl_vfl_read_page(uint32_t bank, uint32_t block,
|
| 655 | | - uint32_t startpage, void* databuffer,
|
| 656 | | - union ftl_spare_data_type* sparebuffer)
|
| | 654 | +static uint32_t ftl_vfl_read_page(uint32_t bank, uint32_t block,
|
| | 655 | + uint32_t startpage, void* databuffer,
|
| | 656 | + union ftl_spare_data_type* sparebuffer)
|
| 657 | 657 | {
|
| 658 | 658 | uint32_t i;
|
| 659 | 659 | for (i = 0; i < 8; i++)
|
| — | — | @@ -670,7 +670,7 @@ |
| 671 | 671 |
|
| 672 | 672 |
|
| 673 | 673 | /* Translates a bank and vBlock to a pBlock, following remaps */
|
| 674 | | -uint32_t ftl_vfl_get_physical_block(uint32_t bank, uint32_t block)
|
| | 674 | +static uint32_t ftl_vfl_get_physical_block(uint32_t bank, uint32_t block)
|
| 675 | 675 | {
|
| 676 | 676 | if (ftl_vfl_is_good_block(bank, block) == 1) return block;
|
| 677 | 677 |
|
| — | — | @@ -689,7 +689,7 @@ |
| 690 | 690 |
|
| 691 | 691 | #ifndef FTL_READONLY
|
| 692 | 692 | /* Checks if remapping is scheduled for the specified bank and vBlock */
|
| 693 | | -uint32_t ftl_vfl_check_remap_scheduled(uint32_t bank, uint32_t block)
|
| | 693 | +static uint32_t ftl_vfl_check_remap_scheduled(uint32_t bank, uint32_t block)
|
| 694 | 694 | {
|
| 695 | 695 | uint32_t i;
|
| 696 | 696 | for (i = 0x333; i > 0 && i > ftl_vfl_cxt[bank].scheduledstart; i--)
|
| — | — | @@ -701,7 +701,7 @@ |
| 702 | 702 |
|
| 703 | 703 | #ifndef FTL_READONLY
|
| 704 | 704 | /* Schedules remapping for the specified bank and vBlock */
|
| 705 | | -void ftl_vfl_schedule_block_for_remap(uint32_t bank, uint32_t block)
|
| | 705 | +static void ftl_vfl_schedule_block_for_remap(uint32_t bank, uint32_t block)
|
| 706 | 706 | {
|
| 707 | 707 | if (ftl_vfl_check_remap_scheduled(bank, block) == 1) return;
|
| 708 | 708 | panicf(PANIC_FATAL, "FTL: Scheduling bank %u block %u for remap!",
|
| — | — | @@ -717,7 +717,7 @@ |
| 718 | 718 | #ifndef FTL_READONLY
|
| 719 | 719 | /* Removes the specified bank and vBlock combination
|
| 720 | 720 | from the remap scheduled list */
|
| 721 | | -void ftl_vfl_mark_remap_done(uint32_t bank, uint32_t block)
|
| | 721 | +static void ftl_vfl_mark_remap_done(uint32_t bank, uint32_t block)
|
| 722 | 722 | {
|
| 723 | 723 | uint32_t i;
|
| 724 | 724 | uint32_t start = ftl_vfl_cxt[bank].scheduledstart;
|
| — | — | @@ -738,7 +738,7 @@ |
| 739 | 739 | /* Logs that there is trouble for the specified vBlock on the specified bank.
|
| 740 | 740 | The vBlock will be scheduled for remap
|
| 741 | 741 | if there is too much trouble with it. */
|
| 742 | | -void ftl_vfl_log_trouble(uint32_t bank, uint32_t vblock)
|
| | 742 | +static void ftl_vfl_log_trouble(uint32_t bank, uint32_t vblock)
|
| 743 | 743 | {
|
| 744 | 744 | uint32_t i;
|
| 745 | 745 | for (i = 0; i < 5; i++)
|
| — | — | @@ -767,7 +767,7 @@ |
| 768 | 768 |
|
| 769 | 769 | #ifndef FTL_READONLY
|
| 770 | 770 | /* Logs a successful erase for the specified vBlock on the specified bank */
|
| 771 | | -void ftl_vfl_log_success(uint32_t bank, uint32_t vblock)
|
| | 771 | +static void ftl_vfl_log_success(uint32_t bank, uint32_t vblock)
|
| 772 | 772 | {
|
| 773 | 773 | uint32_t i;
|
| 774 | 774 | for (i = 0; i < 5; i++)
|
| — | — | @@ -787,7 +787,7 @@ |
| 788 | 788 | not caring about data in there.
|
| 789 | 789 | If it worked, it will return the new pBlock number,
|
| 790 | 790 | if not (no more spare blocks available), it will return zero. */
|
| 791 | | -uint32_t ftl_vfl_remap_block(uint32_t bank, uint32_t block)
|
| | 791 | +static uint32_t ftl_vfl_remap_block(uint32_t bank, uint32_t block)
|
| 792 | 792 | {
|
| 793 | 793 | uint32_t i;
|
| 794 | 794 | uint32_t newblock = 0, newidx;
|
| — | — | @@ -818,8 +818,8 @@ |
| 819 | 819 |
|
| 820 | 820 |
|
| 821 | 821 | /* Reads the specified vPage, dealing with all kinds of trouble */
|
| 822 | | -uint32_t ftl_vfl_read(uint32_t vpage, void* buffer, void* sparebuffer,
|
| 823 | | - uint32_t checkempty, uint32_t remaponfail)
|
| | 822 | +static uint32_t ftl_vfl_read(uint32_t vpage, void* buffer, void* sparebuffer,
|
| | 823 | + uint32_t checkempty, uint32_t remaponfail)
|
| 824 | 824 | {
|
| 825 | 825 | #ifdef VFL_TRACE
|
| 826 | 826 | DEBUGF("FTL: VFL: Reading page %d", vpage);
|
| — | — | @@ -866,8 +866,8 @@ |
| 867 | 867 |
|
| 868 | 868 |
|
| 869 | 869 | /* Multi-bank version of ftl_vfl_read, will read ftl_banks pages in parallel */
|
| 870 | | -uint32_t ftl_vfl_read_fast(uint32_t vpage, void* buffer, void* sparebuffer,
|
| 871 | | - uint32_t checkempty, uint32_t remaponfail)
|
| | 870 | +static uint32_t ftl_vfl_read_fast(uint32_t vpage, void* buffer, void* sparebuffer,
|
| | 871 | + uint32_t checkempty, uint32_t remaponfail)
|
| 872 | 872 | {
|
| 873 | 873 | #ifdef VFL_TRACE
|
| 874 | 874 | DEBUGF("FTL: VFL: Fast reading page %d on all banks", vpage);
|
| — | — | @@ -942,8 +942,8 @@ |
| 943 | 943 |
|
| 944 | 944 | #ifndef FTL_READONLY
|
| 945 | 945 | /* Writes the specified vPage, dealing with all kinds of trouble */
|
| 946 | | -uint32_t ftl_vfl_write(uint32_t vpage, uint32_t count,
|
| 947 | | - void* buffer, void* sparebuffer)
|
| | 946 | +static uint32_t ftl_vfl_write(uint32_t vpage, uint32_t count,
|
| | 947 | + void* buffer, void* sparebuffer)
|
| 948 | 948 | {
|
| 949 | 949 | uint32_t i, j;
|
| 950 | 950 | #ifdef VFL_TRACE
|
| — | — | @@ -1019,7 +1019,7 @@ |
| 1020 | 1020 |
|
| 1021 | 1021 |
|
| 1022 | 1022 | /* Mounts the VFL on all banks */
|
| 1023 | | -uint32_t ftl_vfl_open(void)
|
| | 1023 | +static uint32_t ftl_vfl_open(void)
|
| 1024 | 1024 | {
|
| 1025 | 1025 | uint32_t i, j, k;
|
| 1026 | 1026 | uint32_t minusn, vflcxtidx, last;
|
| — | — | @@ -1112,7 +1112,7 @@ |
| 1113 | 1113 |
|
| 1114 | 1114 |
|
| 1115 | 1115 | /* Mounts the actual FTL */
|
| 1116 | | -uint32_t ftl_open(void)
|
| | 1116 | +static uint32_t ftl_open(void)
|
| 1117 | 1117 | {
|
| 1118 | 1118 | uint32_t i;
|
| 1119 | 1119 | uint32_t ret;
|
| — | — | @@ -1264,7 +1264,7 @@ |
| 1265 | 1265 | #ifndef FTL_READONLY
|
| 1266 | 1266 | /* Returns a pointer to the ftl_log entry for the specified vBlock,
|
| 1267 | 1267 | or null, if there is none */
|
| 1268 | | -struct ftl_log_type* ftl_get_log_entry(uint32_t block)
|
| | 1268 | +static struct ftl_log_type* ftl_get_log_entry(uint32_t block)
|
| 1269 | 1269 | {
|
| 1270 | 1270 | uint32_t i;
|
| 1271 | 1271 | for (i = 0; i < 0x11; i++)
|
| — | — | @@ -1365,7 +1365,7 @@ |
| 1366 | 1366 | #ifndef FTL_READONLY
|
| 1367 | 1367 | /* Performs a vBlock erase, dealing with hardware,
|
| 1368 | 1368 | remapping and all kinds of trouble */
|
| 1369 | | -uint32_t ftl_erase_block_internal(uint32_t block)
|
| | 1369 | +static uint32_t ftl_erase_block_internal(uint32_t block)
|
| 1370 | 1370 | {
|
| 1371 | 1371 | uint32_t i, j;
|
| 1372 | 1372 | block = block + ftl_nand_type->blocks
|
| — | — | @@ -1409,7 +1409,7 @@ |
| 1410 | 1410 |
|
| 1411 | 1411 | #ifndef FTL_READONLY
|
| 1412 | 1412 | /* Highlevel vBlock erase, that increments the erase counter for the block */
|
| 1413 | | -uint32_t ftl_erase_block(uint32_t block)
|
| | 1413 | +static uint32_t ftl_erase_block(uint32_t block)
|
| 1414 | 1414 | {
|
| 1415 | 1415 | ftl_erasectr[block]++;
|
| 1416 | 1416 | if (ftl_erasectr_dirt[block >> 10] == 100) ftl_cxt.erasedirty = 1;
|
| — | — | @@ -1422,7 +1422,7 @@ |
| 1423 | 1423 | #ifndef FTL_READONLY
|
| 1424 | 1424 | /* Allocates a block from the pool,
|
| 1425 | 1425 | returning its vBlock number, or 0xFFFFFFFF on error */
|
| 1426 | | -uint32_t ftl_allocate_pool_block(void)
|
| | 1426 | +static uint32_t ftl_allocate_pool_block(void)
|
| 1427 | 1427 | {
|
| 1428 | 1428 | uint32_t i;
|
| 1429 | 1429 | uint32_t erasectr = 0xFFFFFFFF, bestidx = 0xFFFFFFFF, block;
|
| — | — | @@ -1456,7 +1456,7 @@ |
| 1457 | 1457 |
|
| 1458 | 1458 | #ifndef FTL_READONLY
|
| 1459 | 1459 | /* Releases a vBlock back into the pool */
|
| 1460 | | -void ftl_release_pool_block(uint32_t block)
|
| | 1460 | +static void ftl_release_pool_block(uint32_t block)
|
| 1461 | 1461 | {
|
| 1462 | 1462 | if (block >= (uint32_t)ftl_nand_type->userblocks + 0x17)
|
| 1463 | 1463 | panicf(PANIC_FATAL, "FTL: Tried to release block %u", (unsigned)block);
|
| — | — | @@ -1470,7 +1470,7 @@ |
| 1471 | 1471 | #ifndef FTL_READONLY
|
| 1472 | 1472 | /* Commits the location of the FTL context blocks
|
| 1473 | 1473 | to a semi-randomly chosen VFL context */
|
| 1474 | | -uint32_t ftl_store_ctrl_block_list(void)
|
| | 1474 | +static uint32_t ftl_store_ctrl_block_list(void)
|
| 1475 | 1475 | {
|
| 1476 | 1476 | uint32_t i;
|
| 1477 | 1477 | for (i = 0; i < ftl_banks; i++)
|
| — | — | @@ -1483,7 +1483,7 @@ |
| 1484 | 1484 | #ifndef FTL_READONLY
|
| 1485 | 1485 | /* Saves the n-th erase counter page to the flash,
|
| 1486 | 1486 | because it is too dirty or needs to be moved. */
|
| 1487 | | -uint32_t ftl_save_erasectr_page(uint32_t index)
|
| | 1487 | +static uint32_t ftl_save_erasectr_page(uint32_t index)
|
| 1488 | 1488 | {
|
| 1489 | 1489 | memset(&ftl_sparebuffer[0], 0xFF, 0x40);
|
| 1490 | 1490 | ftl_sparebuffer[0].meta.usn = ftl_cxt.usn;
|
| — | — | @@ -1509,7 +1509,7 @@ |
| 1510 | 1510 | #ifndef FTL_READONLY
|
| 1511 | 1511 | /* Increments ftl_cxt.ftlctrlpage to the next available FTL context page,
|
| 1512 | 1512 | allocating a new context block if neccessary. */
|
| 1513 | | -uint32_t ftl_next_ctrl_pool_page(void)
|
| | 1513 | +static uint32_t ftl_next_ctrl_pool_page(void)
|
| 1514 | 1514 | {
|
| 1515 | 1515 | uint32_t i;
|
| 1516 | 1516 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| — | — | @@ -1548,8 +1548,8 @@ |
| 1549 | 1549 |
|
| 1550 | 1550 | #ifndef FTL_READONLY
|
| 1551 | 1551 | /* Copies a vPage from one location to another */
|
| 1552 | | -uint32_t ftl_copy_page(uint32_t source, uint32_t destination,
|
| 1553 | | - uint32_t lpn, uint32_t type)
|
| | 1552 | +static uint32_t ftl_copy_page(uint32_t source, uint32_t destination,
|
| | 1553 | + uint32_t lpn, uint32_t type)
|
| 1554 | 1554 | {
|
| 1555 | 1555 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| 1556 | 1556 | uint32_t rc = ftl_vfl_read(source, ftl_copybuffer[0],
|
| — | — | @@ -1569,7 +1569,7 @@ |
| 1570 | 1570 |
|
| 1571 | 1571 | #ifndef FTL_READONLY
|
| 1572 | 1572 | /* Copies a pBlock to a vBlock */
|
| 1573 | | -uint32_t ftl_copy_block(uint32_t source, uint32_t destination)
|
| | 1573 | +static uint32_t ftl_copy_block(uint32_t source, uint32_t destination)
|
| 1574 | 1574 | {
|
| 1575 | 1575 | uint32_t i, j;
|
| 1576 | 1576 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| — | — | @@ -1611,7 +1611,7 @@ |
| 1612 | 1612 |
|
| 1613 | 1613 | #ifndef FTL_READONLY
|
| 1614 | 1614 | /* Clears ftl_log.issequential, if something violating that is written. */
|
| 1615 | | -void ftl_check_still_sequential(struct ftl_log_type* entry, uint32_t page)
|
| | 1615 | +static void ftl_check_still_sequential(struct ftl_log_type* entry, uint32_t page)
|
| 1616 | 1616 | {
|
| 1617 | 1617 | if (entry->pagesused != entry->pagescurrent
|
| 1618 | 1618 | || entry->pageoffsets[page] != page)
|
| — | — | @@ -1628,7 +1628,7 @@ |
| 1629 | 1629 | space again. This is usually done when a scattered page block is being
|
| 1630 | 1630 | removed because it is full, but less than half of the pages in there are
|
| 1631 | 1631 | still in use and rest is just filled with old crap. */
|
| 1632 | | -uint32_t ftl_compact_scattered(struct ftl_log_type* entry)
|
| | 1632 | +static uint32_t ftl_compact_scattered(struct ftl_log_type* entry)
|
| 1633 | 1633 | {
|
| 1634 | 1634 | uint32_t i, j;
|
| 1635 | 1635 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| — | — | @@ -1684,7 +1684,7 @@ |
| 1685 | 1685 |
|
| 1686 | 1686 | #ifndef FTL_READONLY
|
| 1687 | 1687 | /* Commits an ftl_log entry to proper blocks, no matter what's in there. */
|
| 1688 | | -uint32_t ftl_commit_scattered(struct ftl_log_type* entry)
|
| | 1688 | +static uint32_t ftl_commit_scattered(struct ftl_log_type* entry)
|
| 1689 | 1689 | {
|
| 1690 | 1690 | uint32_t i;
|
| 1691 | 1691 | uint32_t error;
|
| — | — | @@ -1712,7 +1712,7 @@ |
| 1713 | 1713 | sequentially until now, in order to be able to save a block erase by
|
| 1714 | 1714 | committing it without needing to copy it again.
|
| 1715 | 1715 | If this fails for whichever reason, it will be committed the usual way. */
|
| 1716 | | -uint32_t ftl_commit_sequential(struct ftl_log_type* entry)
|
| | 1716 | +static uint32_t ftl_commit_sequential(struct ftl_log_type* entry)
|
| 1717 | 1717 | {
|
| 1718 | 1718 | uint32_t i;
|
| 1719 | 1719 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| — | — | @@ -1758,7 +1758,7 @@ |
| 1759 | 1759 | /* If a log entry is supplied, its scattered page block will be removed in
|
| 1760 | 1760 | whatever way seems most appropriate. Else, the oldest scattered page block
|
| 1761 | 1761 | will be freed by committing it. */
|
| 1762 | | -uint32_t ftl_remove_scattered_block(struct ftl_log_type* entry)
|
| | 1762 | +static uint32_t ftl_remove_scattered_block(struct ftl_log_type* entry)
|
| 1763 | 1763 | {
|
| 1764 | 1764 | uint32_t i;
|
| 1765 | 1765 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| — | — | @@ -1794,7 +1794,7 @@ |
| 1795 | 1795 |
|
| 1796 | 1796 | #ifndef FTL_READONLY
|
| 1797 | 1797 | /* Initialize a log entry to the values for an empty scattered page block */
|
| 1798 | | -void ftl_init_log_entry(struct ftl_log_type* entry)
|
| | 1798 | +static void ftl_init_log_entry(struct ftl_log_type* entry)
|
| 1799 | 1799 | {
|
| 1800 | 1800 | entry->issequential = 1;
|
| 1801 | 1801 | entry->pagescurrent = 0;
|
| — | — | @@ -1807,7 +1807,7 @@ |
| 1808 | 1808 | #ifndef FTL_READONLY
|
| 1809 | 1809 | /* Allocates a log entry for the specified vBlock,
|
| 1810 | 1810 | first making space, if neccessary. */
|
| 1811 | | -struct ftl_log_type* ftl_allocate_log_entry(uint32_t block)
|
| | 1811 | +static struct ftl_log_type* ftl_allocate_log_entry(uint32_t block)
|
| 1812 | 1812 | {
|
| 1813 | 1813 | uint32_t i;
|
| 1814 | 1814 | struct ftl_log_type* entry = ftl_get_log_entry(block);
|
| — | — | @@ -1848,7 +1848,7 @@ |
| 1849 | 1849 |
|
| 1850 | 1850 | #ifndef FTL_READONLY
|
| 1851 | 1851 | /* Commits the FTL block map, erase counters, and context to flash */
|
| 1852 | | -uint32_t ftl_commit_cxt(void)
|
| | 1852 | +static uint32_t ftl_commit_cxt(void)
|
| 1853 | 1853 | {
|
| 1854 | 1854 | uint32_t i;
|
| 1855 | 1855 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| — | — | @@ -1892,7 +1892,7 @@ |
| 1893 | 1893 | /* Swaps the most and least worn block on the flash,
|
| 1894 | 1894 | to better distribute wear. It will refuse to do anything
|
| 1895 | 1895 | if the wear spread is lower than 5 erases. */
|
| 1896 | | -uint32_t ftl_swap_blocks(void)
|
| | 1896 | +static uint32_t ftl_swap_blocks(void)
|
| 1897 | 1897 | {
|
| 1898 | 1898 | uint32_t i;
|
| 1899 | 1899 | uint32_t min = 0xFFFFFFFF, max = 0, maxidx = 0x14;
|
| — | — | @@ -2118,6 +2118,8 @@ |
| 2119 | 2119 | uint32_t ppb = ftl_nand_type->pagesperblock * ftl_banks;
|
| 2120 | 2120 | if (ftl_cxt.clean_flag == 1) return 0;
|
| 2121 | 2121 |
|
| | 2122 | + mutex_lock(&ftl_mtx, TIMEOUT_BLOCK);
|
| | 2123 | +
|
| 2122 | 2124 | #ifdef FTL_TRACE
|
| 2123 | 2125 | DEBUGF("FTL: Syncing");
|
| 2124 | 2126 | #endif
|
| Index: embios/trunk/usb/synopsysotg.c |
| — | — | @@ -51,7 +51,7 @@ |
| 52 | 52 | return (DSTS & 2) == 0 ? 1 : 0;
|
| 53 | 53 | }
|
| 54 | 54 |
|
| 55 | | -void reset_endpoints(int reinit)
|
| | 55 | +static void reset_endpoints(int reinit)
|
| 56 | 56 | {
|
| 57 | 57 | unsigned int i;
|
| 58 | 58 | for (i = 0; i < sizeof(endpoints)/sizeof(struct ep_type); i++)
|
| — | — | @@ -257,7 +257,7 @@ |
| 258 | 258 | DCFG = (DCFG & ~0x7F0) | (address << 4);
|
| 259 | 259 | }
|
| 260 | 260 |
|
| 261 | | -void ep_send(int ep, const void *ptr, int length)
|
| | 261 | +static void ep_send(int ep, const void *ptr, int length)
|
| 262 | 262 | {
|
| 263 | 263 | endpoints[ep].busy = true;
|
| 264 | 264 | endpoints[ep].size = length;
|
| — | — | @@ -273,13 +273,12 @@ |
| 274 | 274 | {
|
| 275 | 275 | DIEPTSIZ(ep) = length | (packets << 19);
|
| 276 | 276 | DIEPDMA(ep) = (uint32_t)ptr;
|
| 277 | | -// if (length > 64) panicf(PANIC_FATAL, "%08X %08X %08X\n%08X %08X %08X", ptr, length | (packets << 19), DIEPCTL(ep), DIEPDMA(ep), DIEPTSIZ(ep), DIEPINT(ep));
|
| 278 | 277 | }
|
| 279 | 278 | clean_dcache();
|
| 280 | 279 | DIEPCTL(ep) |= 0x84000000; /* EPx OUT ENABLE CLEARNAK */
|
| 281 | 280 | }
|
| 282 | 281 |
|
| 283 | | -void ep_recv(int ep, void *ptr, int length)
|
| | 282 | +static void ep_recv(int ep, void *ptr, int length)
|
| 284 | 283 | {
|
| 285 | 284 | endpoints[ep].busy = true;
|
| 286 | 285 | endpoints[ep].size = length;
|