RTEMS  5.0.0
Data Structures | Macros | Typedefs | Functions

Constants/Data Structures/Prototypes on a Volume with FAT Filesystem. More...

#include <sys/param.h>
#include <sys/endian.h>
#include <string.h>
#include <rtems/seterr.h>
#include <errno.h>
#include <rtems/bdbuf.h>

Go to the source code of this file.

Data Structures

struct  fat_vol_s
 
struct  fat_cache_s
 
struct  fat_fs_info_s
 
struct  fat_pos_s
 
struct  fat_dir_pos_s
 

Macros

#define RC_OK   0
 
#define CF_LE_W(v)   le16toh(v)
 
#define CF_LE_L(v)   le32toh(v)
 
#define CT_LE_W(v)   htole16(v)
 
#define CT_LE_L(v)   htole32(v)
 
#define FAT_HASH_SIZE   2
 
#define FAT_HASH_MODULE   FAT_HASH_SIZE
 
#define FAT_SECTOR512_SIZE   512 /* sector size (bytes) */
 
#define FAT_SECTOR512_BITS   9 /* log2(SECTOR_SIZE) */
 
#define FAT_FAT12_MAX_CLN   4085
 
#define FAT_FAT16_MAX_CLN   65525
 
#define FAT_FAT12   0x01
 
#define FAT_FAT16   0x02
 
#define FAT_FAT32   0x04
 
#define FAT_UNDEFINED_VALUE   (uint32_t)0xFFFFFFFF
 
#define FAT_FAT12_EOC   0x0FF8
 
#define FAT_FAT16_EOC   0xFFF8
 
#define FAT_FAT32_EOC   (uint32_t)0x0FFFFFF8
 
#define FAT_FAT12_FREE   0x0000
 
#define FAT_FAT16_FREE   0x0000
 
#define FAT_FAT32_FREE   0x00000000
 
#define FAT_GENFAT_EOC   (uint32_t)0xFFFFFFFF
 
#define FAT_GENFAT_FREE   (uint32_t)0x00000000
 
#define FAT_FAT12_SHIFT   0x04
 
#define FAT_FAT12_MASK   0x00000FFF
 
#define FAT_FAT16_MASK   0x0000FFFF
 
#define FAT_FAT32_MASK   (uint32_t)0x0FFFFFFF
 
#define FAT_MAX_BPB_SIZE   90
 
#define FAT_TOTAL_MBR_SIZE   512
 
#define FAT_USEFUL_INFO_SIZE   12
 
#define FAT_GET_ADDR(x, ofs)   ((uint8_t *)(x) + (ofs))
 
#define FAT_GET_VAL8(x, ofs)   (uint8_t)(*((uint8_t *)(x) + (ofs)))
 
#define FAT_GET_VAL16(x, ofs)
 
#define FAT_GET_VAL32(x, ofs)
 
#define FAT_SET_VAL8(x, ofs, val)   (*((uint8_t *)(x)+(ofs))=(uint8_t)(val))
 
#define FAT_SET_VAL16(x, ofs, val)
 
#define FAT_SET_VAL32(x, ofs, val)
 
#define FAT_GET_BR_JMPBOOT(x)   FAT_GET_VAL8( x, 0)
 
#define FAT_SET_BR_JMPBOOT(x, val)   FAT_SET_VAL8( x, 0,val)
 
#define FAT_GET_ADDR_BR_OEMNAME(x)   FAT_GET_ADDR( x, 3)
 
#define FAT_BR_OEMNAME_SIZE   (8)
 
#define FAT_GET_BR_BYTES_PER_SECTOR(x)   FAT_GET_VAL16(x, 11)
 
#define FAT_SET_BR_BYTES_PER_SECTOR(x, val)   FAT_SET_VAL16(x, 11,val)
 
#define FAT_GET_BR_SECTORS_PER_CLUSTER(x)   FAT_GET_VAL8( x, 13)
 
#define FAT_SET_BR_SECTORS_PER_CLUSTER(x, val)   FAT_SET_VAL8( x, 13,val)
 
#define FAT_GET_BR_RESERVED_SECTORS_NUM(x)   FAT_GET_VAL16(x, 14)
 
#define FAT_SET_BR_RESERVED_SECTORS_NUM(x, val)   FAT_SET_VAL16(x, 14,val)
 
#define FAT_GET_BR_FAT_NUM(x)   FAT_GET_VAL8( x, 16)
 
#define FAT_SET_BR_FAT_NUM(x, val)   FAT_SET_VAL8( x, 16,val)
 
#define FAT_GET_BR_FILES_PER_ROOT_DIR(x)   FAT_GET_VAL16(x, 17)
 
#define FAT_SET_BR_FILES_PER_ROOT_DIR(x, val)   FAT_SET_VAL16(x, 17,val)
 
#define FAT_GET_BR_TOTAL_SECTORS_NUM16(x)   FAT_GET_VAL16(x, 19)
 
#define FAT_SET_BR_TOTAL_SECTORS_NUM16(x, val)   FAT_SET_VAL16(x, 19,val)
 
#define FAT_GET_BR_MEDIA(x)   FAT_GET_VAL8( x, 21)
 
#define FAT_SET_BR_MEDIA(x, val)   FAT_SET_VAL8( x, 21,val)
 
#define FAT_GET_BR_SECTORS_PER_FAT(x)   FAT_GET_VAL16(x, 22)
 
#define FAT_SET_BR_SECTORS_PER_FAT(x, val)   FAT_SET_VAL16(x, 22,val)
 
#define FAT_GET_BR_SECTORS_PER_TRACK(x)   FAT_GET_VAL16(x, 24)
 
#define FAT_SET_BR_SECTORS_PER_TRACK(x, val)   FAT_SET_VAL16(x, 24,val)
 
#define FAT_GET_BR_NUMBER_OF_HEADS(x)   FAT_GET_VAL16(x, 26)
 
#define FAT_SET_BR_NUMBER_OF_HEADS(x, val)   FAT_SET_VAL16(x, 26,val)
 
#define FAT_GET_BR_HIDDEN_SECTORS(x)   FAT_GET_VAL32(x, 28)
 
#define FAT_SET_BR_HIDDEN_SECTORS(x, val)   FAT_SET_VAL32(x, 28,val)
 
#define FAT_GET_BR_TOTAL_SECTORS_NUM32(x)   FAT_GET_VAL32(x, 32)
 
#define FAT_SET_BR_TOTAL_SECTORS_NUM32(x, val)   FAT_SET_VAL32(x, 32,val)
 
#define FAT_GET_BR_DRVNUM(x)   FAT_GET_VAL8( x, 36)
 
#define FAT_SET_BR_DRVNUM(x, val)   FAT_SET_VAL8( x, 36,val)
 
#define FAT_GET_BR_RSVD1(x)   FAT_GET_VAL8( x, 37)
 
#define FAT_SET_BR_RSVD1(x, val)   FAT_SET_VAL8( x, 37,val)
 
#define FAT_GET_BR_BOOTSIG(x)   FAT_GET_VAL8( x, 38)
 
#define FAT_SET_BR_BOOTSIG(x, val)   FAT_SET_VAL8( x, 38,val)
 
#define FAT_BR_BOOTSIG_VAL   (0x29)
 
#define FAT_GET_BR_VOLID(x)   FAT_GET_VAL32(x, 39)
 
#define FAT_SET_BR_VOLID(x, val)   FAT_SET_VAL32(x, 39,val)
 
#define FAT_GET_ADDR_BR_VOLLAB(x)   FAT_GET_ADDR (x, 43)
 
#define FAT_BR_VOLLAB_SIZE   (11)
 
#define FAT_GET_ADDR_BR_FILSYSTYPE(x)   FAT_GET_ADDR (x, 54)
 
#define FAT_BR_FILSYSTYPE_SIZE   (8)
 
#define FAT_GET_BR_SECTORS_PER_FAT32(x)   FAT_GET_VAL32(x, 36)
 
#define FAT_SET_BR_SECTORS_PER_FAT32(x, val)   FAT_SET_VAL32(x, 36,val)
 
#define FAT_GET_BR_EXT_FLAGS(x)   FAT_GET_VAL16(x, 40)
 
#define FAT_SET_BR_EXT_FLAGS(x, val)   FAT_SET_VAL16(x, 40,val)
 
#define FAT_GET_BR_FSVER(x)   FAT_GET_VAL16(x, 42)
 
#define FAT_SET_BR_FSVER(x, val)   FAT_SET_VAL16(x, 42,val)
 
#define FAT_GET_BR_FAT32_ROOT_CLUSTER(x)   FAT_GET_VAL32(x, 44)
 
#define FAT_SET_BR_FAT32_ROOT_CLUSTER(x, val)   FAT_SET_VAL32(x, 44,val)
 
#define FAT_GET_BR_FAT32_FS_INFO_SECTOR(x)   FAT_GET_VAL16(x, 48)
 
#define FAT_SET_BR_FAT32_FS_INFO_SECTOR(x, val)   FAT_SET_VAL16(x, 48,val)
 
#define FAT_GET_BR_FAT32_BK_BOOT_SECTOR(x)   FAT_GET_VAL16(x, 50)
 
#define FAT_SET_BR_FAT32_BK_BOOT_SECTOR(x, val)   FAT_SET_VAL16(x, 50,val)
 
#define FAT_GET_ADDR_BR_FAT32_RESERVED(x)   FAT_GET_ADDR (x, 52)
 
#define FAT_BR_FAT32_RESERVED_SIZE   (12)
 
#define FAT_GET_BR_FAT32_DRVNUM(x)   FAT_GET_VAL8( x, 64)
 
#define FAT_SET_BR_FAT32_DRVNUM(x, val)   FAT_SET_VAL8( x, 64,val)
 
#define FAT_GET_BR_FAT32_RSVD1(x)   FAT_GET_VAL8( x, 65)
 
#define FAT_SET_BR_FAT32_RSVD1(x, val)   FAT_SET_VAL8( x, 65,val)
 
#define FAT_GET_BR_FAT32_BOOTSIG(x)   FAT_GET_VAL8( x, 66)
 
#define FAT_SET_BR_FAT32_BOOTSIG(x, val)   FAT_SET_VAL8( x, 66,val)
 
#define FAT_BR_FAT32_BOOTSIG_VAL   (0x29)
 
#define FAT_GET_BR_FAT32_VOLID(x)   FAT_GET_VAL32(x, 67)
 
#define FAT_SET_BR_FAT32_VOLID(x, val)   FAT_SET_VAL32(x, 67,val)
 
#define FAT_GET_ADDR_BR_FAT32_VOLLAB(x)   FAT_GET_ADDR (x, 71)
 
#define FAT_BR_FAT32_VOLLAB_SIZE   (11)
 
#define FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(x)   FAT_GET_ADDR (x, 82)
 
#define FAT_BR_FAT32_FILSYSTYPE_SIZE   (8)
 
#define FAT_GET_BR_SIGNATURE(x)   FAT_GET_VAL16(x,510)
 
#define FAT_SET_BR_SIGNATURE(x, val)   FAT_SET_VAL16(x,510,val)
 
#define FAT_BR_SIGNATURE_VAL   (0xAA55)
 
#define FAT_GET_FSINFO_LEAD_SIGNATURE(x)   FAT_GET_VAL32(x, 0)
 
#define FAT_SET_FSINFO_LEAD_SIGNATURE(x, val)   FAT_SET_VAL32(x, 0,val)
 
#define FAT_FSINFO_LEAD_SIGNATURE_VALUE   (0x41615252)
 
#define FAT_GET_FSINFO_STRUC_SIGNATURE(x)   FAT_GET_VAL32(x,484)
 
#define FAT_SET_FSINFO_STRUC_SIGNATURE(x, val)   FAT_SET_VAL32(x,484,val)
 
#define FAT_FSINFO_STRUC_SIGNATURE_VALUE   (0x61417272)
 
#define FAT_GET_FSINFO_TRAIL_SIGNATURE(x)   FAT_GET_VAL32(x,508)
 
#define FAT_SET_FSINFO_TRAIL_SIGNATURE(x, val)   FAT_SET_VAL32(x,508,val)
 
#define FAT_FSINFO_TRAIL_SIGNATURE_VALUE   (0xAA550000)
 
#define FAT_GET_FSINFO_FREE_CLUSTER_COUNT(x)   FAT_GET_VAL32(x, 4)
 
#define FAT_SET_FSINFO_FREE_CLUSTER_COUNT(x, val)   FAT_SET_VAL32(x, 4,val)
 
#define FAT_GET_FSINFO_NEXT_FREE_CLUSTER(x)   FAT_GET_VAL32(x, 8)
 
#define FAT_SET_FSINFO_NEXT_FREE_CLUSTER(x, val)   FAT_SET_VAL32(x, 8,val)
 
#define FAT_FSI_INFO   484
 
#define FAT_FSINFO_STRUCT_OFFSET   488
 
#define FAT_FSINFO_FREE_CLUSTER_COUNT_OFFSET   (FAT_FSINFO_STRUCT_OFFSET+0)
 
#define FAT_FSINFO_NEXT_FREE_CLUSTER_OFFSET   (FAT_FSINFO_STRUCT_OFFSET+4)
 
#define FAT_RSRVD_CLN   0x02
 
#define FAT_FSI_LEADSIG_SIZE   0x04
 
#define FAT_TOTAL_FSINFO_SIZE   512
 
#define MS_BYTES_PER_CLUSTER_LIMIT   0x10000 /* 64K */
 
#define MS_BYTES_PER_CLUSTER_LIMIT_FAT12   0x1000 /* 4K */
 
#define FAT_BR_EXT_FLAGS_MIRROR   0x0080
 
#define FAT_BR_EXT_FLAGS_FAT_NUM   0x000F
 
#define FAT_BR_MEDIA_FIXED   0xf8
 
#define FAT_DIRENTRY_SIZE   32
 
#define FAT_DIRENTRIES_PER_SEC512   16
 
#define FAT_FILE_SHORT_NAME   (0xffffffff)
 
#define FAT_FAT_OFFSET(fat_type, cln)
 
#define FAT_CLUSTER_IS_ODD(n)   ((n) & 0x0001)
 
#define FAT12_SHIFT   0x4 /* half of a byte */
 
#define FAT_UINO_POOL_INIT_SIZE   0x100
 
#define FAT_CACHE_EMPTY   0x0
 
#define FAT_CACHE_ACTUAL   0x1
 
#define FAT_OP_TYPE_READ   0x1
 
#define FAT_OP_TYPE_GET   0x2
 

Typedefs

typedef struct fat_vol_s fat_vol_t
 
typedef struct fat_cache_s fat_cache_t
 
typedef struct fat_fs_info_s fat_fs_info_t
 
typedef struct fat_pos_s fat_pos_t
 
typedef struct fat_dir_pos_s fat_dir_pos_t
 

Functions

int fat_buf_access (fat_fs_info_t *fs_info, uint32_t sec_num, int op_type, uint8_t **sec_buf)
 
int fat_buf_release (fat_fs_info_t *fs_info)
 
ssize_t _fat_block_read (fat_fs_info_t *fs_info, uint32_t start, uint32_t offset, uint32_t count, void *buff)
 
ssize_t fat_cluster_write (fat_fs_info_t *fs_info, uint32_t start_cln, uint32_t offset, uint32_t count, const void *buff)
 
ssize_t fat_sector_write (fat_fs_info_t *fs_info, uint32_t start, uint32_t offset, uint32_t count, const void *buff)
 
ssize_t fat_cluster_set (fat_fs_info_t *fs_info, uint32_t start, uint32_t offset, uint32_t count, uint8_t pattern)
 
int fat_init_volume_info (fat_fs_info_t *fs_info, const char *device)
 
int fat_init_clusters_chain (fat_fs_info_t *fs_info, uint32_t start_cln)
 
int fat_shutdown_drive (fat_fs_info_t *fs_info)
 
uint32_t fat_get_unique_ino (fat_fs_info_t *fs_info)
 
bool fat_ino_is_unique (fat_fs_info_t *fs_info, uint32_t ino)
 
void fat_free_unique_ino (fat_fs_info_t *fs_info, uint32_t ino)
 
int fat_sync (fat_fs_info_t *fs_info)
 

Detailed Description

Constants/Data Structures/Prototypes on a Volume with FAT Filesystem.

Constants/Data Structures/Prototypes for Low-Level Operations on a Volume with FAT Filesystem