41 #ifndef FAT_BUFFER_SECTORS 
   42     #define FAT_BUFFER_SECTORS 1 
   45 #if FAT_BUFFERS < 1 || FAT_BUFFER_SECTORS < 1 
   46     #error "FAT_BUFFERS & FAT_BUFFER_SECTORS must be at least 1" 
   52 #define FAT32_GET_32BIT_WORD(pbuf, location)        ( GET_32BIT_WORD(pbuf->ptr, location) ) 
   53 #define FAT32_SET_32BIT_WORD(pbuf, location, value) { SET_32BIT_WORD(pbuf->ptr, location, value); pbuf->dirty = 1; } 
   54 #define FAT16_GET_16BIT_WORD(pbuf, location)        ( GET_16BIT_WORD(pbuf->ptr, location) ) 
   55 #define FAT16_SET_16BIT_WORD(pbuf, location, value) { SET_16BIT_WORD(pbuf->ptr, location, value); pbuf->dirty = 1; } 
   65     fs->fat_buffer_head = 
NULL;
 
   71         fs->fat_buffers[i].dirty = 0;
 
   72         memset(
fs->fat_buffers[i].sector, 0x00, 
sizeof(
fs->fat_buffers[i].sector));
 
   73         fs->fat_buffers[i].ptr = 
NULL;
 
   76         fs->fat_buffers[i].next = 
fs->fat_buffer_head;
 
   77         fs->fat_buffer_head = &
fs->fat_buffers[i];
 
   90             if (
fs->disk_io.write_media)
 
   99                     sectors = 
fs->fat_sectors - offset;
 
  136                 fs->fat_buffer_head = 
NULL;
 
  154     pcur->
next = 
fs->fat_buffer_head;
 
  155     fs->fat_buffer_head = pcur;
 
  159         if (!fatfs_fat_writeback(
fs, pcur))
 
  188             if (!fatfs_fat_writeback(
fs, pcur))
 
  207     uint32 fat_sector_offset, position;
 
  212     if (current_cluster == 0)
 
  217         fat_sector_offset = current_cluster / 256;
 
  219         fat_sector_offset = current_cluster / 128;
 
  222     pbuf = fatfs_fat_read_sector(
fs, 
fs->fat_begin_lba+fat_sector_offset);
 
  229         position = (current_cluster - (fat_sector_offset * 256)) * 2;
 
  235         if (nextcluster >= 0xFFF8 && nextcluster <= 0xFFFF)
 
  241         position = (current_cluster - (fat_sector_offset * 128)) * 4;
 
  247         nextcluster = nextcluster & 0x0FFFFFFF;
 
  250         if (nextcluster >= 0x0FFFFFF8 && nextcluster <= 0x0FFFFFFF)
 
  255     return (nextcluster);
 
  273         fs->next_free_cluster = newValue;
 
  276         if (
fs->disk_io.write_media)
 
  277             fs->disk_io.write_media(
pbuf->address, 
pbuf->sector, 1);
 
  287 #if FATFS_INC_WRITE_SUPPORT 
  290     uint32 fat_sector_offset, position;
 
  292     uint32 current_cluster = start_cluster;
 
  299             fat_sector_offset = current_cluster / 256;
 
  301             fat_sector_offset = current_cluster / 128;
 
  303         if ( fat_sector_offset < fs->fat_sectors)
 
  306             pbuf = fatfs_fat_read_sector(
fs, 
fs->fat_begin_lba+fat_sector_offset);
 
  313                 position = (current_cluster - (fat_sector_offset * 256)) * 2;
 
  321                 position = (current_cluster - (fat_sector_offset * 128)) * 4;
 
  327                 nextcluster = nextcluster & 0x0FFFFFFF;
 
  330             if (nextcluster !=0 )
 
  337     while (nextcluster != 0x0);
 
  340     *free_cluster = current_cluster;
 
  348 #if FATFS_INC_WRITE_SUPPORT 
  352     uint32 fat_sector_offset, position;
 
  356         fat_sector_offset = cluster / 256;
 
  358         fat_sector_offset = cluster / 128;
 
  361     pbuf = fatfs_fat_read_sector(
fs, 
fs->fat_begin_lba+fat_sector_offset);
 
  368         position = (cluster - (fat_sector_offset * 256)) * 2;
 
  376         position = (cluster - (fat_sector_offset * 128)) * 4;
 
  388 #if FATFS_INC_WRITE_SUPPORT 
  392     uint32 next_cluster = start_cluster;
 
  397         last_cluster = next_cluster;
 
  413 #if FATFS_INC_WRITE_SUPPORT 
  417     uint32 next_cluster = start_cluster;
 
  425         last_cluster = next_cluster;
 
  451     for (i = 0; i < 
fs->fat_sectors; i++)
 
  454         pbuf = fatfs_fat_read_sector(
fs, 
fs->fat_begin_lba + i);