TacOS  0.2
 Tout Structures de données Fichiers Fonctions Variables Définitions de type Énumérations Macros
fat_internal.h
Aller à la documentation de ce fichier.
1 
29 #ifndef _FAT_INTERNAL_H_
30 #define _FAT_INTERNAL_H_
31 
32 #include <types.h>
33 #include <clock.h>
34 #include <vfs.h>
35 #include <fs/devfs.h>
36 
37 // FAT low level.
38 
42 typedef struct _fat_BS {
43  uint8_t bootjmp[3]; //0x00
44  uint8_t oem_name[8]; //0x03
57 } __attribute__ ((packed)) fat_BS_t;
58 
62 typedef struct _fat_extended_BIOS_16 {
63  uint8_t bios_drive_num; //0x24
64  uint8_t reserved; //0x25
67  uint8_t volume_label[11]; //0x2b
68  uint8_t fat_type_label[8]; //0x36
69  uint8_t os_boot_code[448]; //0x3e
70  uint16_t boot_sector_sign; //0x1fe
71 } __attribute__ ((packed)) fat_extended_BIOS_16_t;
72 
76 typedef struct _fat_extended_BIOS_32 {
77  uint32_t table_size_32; //0x24
78  uint16_t fat_flags; //0x28
79  uint16_t version; //0x2a
80  uint32_t cluster_root_dir; //0x2c
81  uint16_t sector_fs_info; //0x30
82  uint16_t sector_bs_backup; //0x32
83  uint8_t reserved[12]; //0x34
84  uint8_t bios_drive_num; //0x40
85  uint8_t reserved2; //0x41
86  uint8_t ext_boot_signature; //0x42
87  uint32_t volume_id; //0x43
88  uint8_t volume_label[11]; //0x47
89  uint8_t fat_type_label[8]; //0x52
90  uint8_t os_boot_code[420]; //0x5a
91  uint16_t boot_sector_sign; //0x1fe
92 } __attribute__ ((packed)) fat_extended_BIOS_32_t;
93 
94 
98 typedef struct _fat_time {
99  unsigned int seconds2 : 5;
100  unsigned int minutes : 6;
101  unsigned int hours : 5;
102 } __attribute__ ((packed)) fat_time_t;
103 
107 typedef struct _fat_date {
108  unsigned int day : 5;
109  unsigned int month : 4;
110  unsigned int year : 7;
111 } __attribute__ ((packed)) fat_date_t;
112 
116 typedef struct _fat_dir_entry {
117  char utf8_short_name[8];
118  char file_extension[3];
124  fat_date_t create_date;
125  fat_date_t last_access_date;
126  uint16_t ea_index;
128  fat_date_t last_modif_date;
132 }__attribute__((packed)) fat_dir_entry_t;
133 
137 typedef struct {
139  uint8_t filename1[10];
143  uint8_t filename2[12];
145  uint8_t filename3[4];
146 }__attribute__((packed)) lfn_entry_t;
147 
148 
149 // FAT higher level.
150 
154 typedef struct _directory_entry {
155  char name[256];
158  time_t access_time;
160  time_t creation_time;
162  struct _directory_entry *next;
164 
168 typedef struct _directory {
171  char name[256];
173 } directory_t;
174 
178 typedef enum {
179  FAT12,
180  FAT16,
181  FAT32
182 } fat_t;
183 
187 typedef struct _fat_info {
191  unsigned int *addr_fat;
192  unsigned int addr_root_dir;
193  unsigned int addr_data;
194  unsigned int *file_alloc_table;
195  unsigned int total_data_clusters;
196  unsigned int table_size;
198  unsigned int bytes_per_cluster;
199 } fat_info_t;
200 
204 typedef struct _fat_fs_instance_t {
206  dentry_t * root;
208  blkdev_read_t read_data;
209  blkdev_write_t write_data;
211 
215 typedef struct _fat_extra_data_t {
218  unsigned int current_octet_buf;
221 
225 typedef struct _fat_direntry_t {
226  dentry_t super;
227  directory_entry_t *fat_entry;
228  directory_t *fat_directory;
230 
231 extern struct _open_file_operations_t fatfs_fops;
240 dentry_t *fat_getroot(struct _fs_instance_t *instance);
241 
251 dentry_t* fat_lookup(struct _fs_instance_t *instance, struct _dentry_t* dentry, const char * name);
252 
261 
267 void read_fat(fat_fs_instance_t *instance);
268 
269 
275 void umount_FAT(fs_instance_t *instance);
276 
286 int fat_readdir(open_file_descriptor * ofd, char * entries, size_t size);
287 
297 int fat_mkdir(fs_instance_t *instance, const char * path, mode_t mode);
298 
308 int fat_stat(fs_instance_t *instance, const char *path, struct stat *stbuf);
309 
318 int fat_unlink(fs_instance_t *instance, const char * path);
319 
329 ssize_t fat_read_file (open_file_descriptor * ofd, void * buf, size_t count);
330 
340 int fat_seek_file (open_file_descriptor * ofd, long offset, int whence);
341 
350 
359 
360 #endif
Definition: fat_internal.h:187
int fat_unlink(fs_instance_t *instance, const char *path)
Definition: fat_functions.c:313
fat_time_t last_modif_time
Definition: fat_internal.h:127
fat_t
Definition: fat_internal.h:178
void read_fat(fat_fs_instance_t *instance)
Definition: fat_internal.c:43
unsigned int total_data_clusters
Definition: fat_internal.h:195
fat_BS_t BS
Definition: fat_internal.h:188
uint16_t root_entry_count
Definition: fat_internal.h:49
uint32_t file_size
Definition: fat_internal.h:130
uint8_t oem_name[8]
Definition: fat_internal.h:44
unsigned int * file_alloc_table
Definition: fat_internal.h:194
Definition: fat_internal.h:107
uint8_t attributes
Definition: fat_internal.h:140
fat_time_t create_time
Definition: fat_internal.h:123
struct _fat_direntry_t fat_direntry_t
Structure fille d'un dentry_t qui ajoute quelques données.
fat_extended_BIOS_16_t * ext_BIOS_16
Definition: fat_internal.h:189
Virtual File System.
uint16_t head_side_count
Definition: fat_internal.h:54
struct _fat_fs_instance_t fat_fs_instance_t
fat_extended_BIOS_32_t * ext_BIOS_32
Definition: fat_internal.h:190
struct _open_file_operations_t fatfs_fops
Definition: fat_internal.c:37
struct _directory directory_t
int fat_close(open_file_descriptor *ofd)
Definition: fat_functions.c:305
uint16_t bytes_per_sector
Definition: fat_internal.h:45
int fat_mkdir(fs_instance_t *instance, const char *path, mode_t mode)
Definition: fat_functions.c:220
fat_date_t last_modif_date
Definition: fat_internal.h:128
time_t creation_time
Definition: fat_internal.h:160
time_t modification_time
Definition: fat_internal.h:159
int total_entries
Definition: fat_internal.h:170
uint32_t cluster
Definition: fat_internal.h:172
uint8_t ext_boot_signature
Definition: fat_internal.h:65
uint8_t file_attributes
Definition: fat_internal.h:119
struct _directory_entry * next
Definition: fat_internal.h:162
uint8_t attributes
Definition: fat_internal.h:156
uint16_t sectors_per_track
Definition: fat_internal.h:53
Instance d'un couple FS/Device monté.
Definition: vfs.h:54
fat_t fat_type
Definition: fat_internal.h:197
uint32_t hidden_sector_count
Definition: fat_internal.h:55
Gestion de l'horloge et du temps en général.
Definition: fat_internal.h:116
dentry_t * fat_getroot(struct _fs_instance_t *instance)
Definition: fat_functions.c:43
Definition: fat_internal.h:168
unsigned int * addr_fat
Definition: fat_internal.h:191
uint32_t size
Definition: fat_internal.h:157
dentry_t * fat_lookup(struct _fs_instance_t *instance, struct _dentry_t *dentry, const char *name)
Definition: fat_functions.c:48
struct _directory_entry directory_entry_t
uint8_t media_type
Definition: fat_internal.h:51
unsigned short int uint16_t
Definition: types.h:35
int fat_readdir(open_file_descriptor *ofd, char *entries, size_t size)
Definition: fat_functions.c:90
unsigned int current_octet_buf
Definition: fat_internal.h:218
uint32_t total_sectors_32
Definition: fat_internal.h:56
ssize_t fat_read_file(open_file_descriptor *ofd, void *buf, size_t count)
Definition: fat_functions.c:180
unsigned int table_size
Definition: fat_internal.h:196
int current_cluster
Definition: fat_internal.h:217
uint32_t cluster
Definition: fat_internal.h:161
unsigned int bytes_per_cluster
Definition: fat_internal.h:198
Definition: fat_internal.h:137
directory_entry_t * entries
Definition: fat_internal.h:169
struct _fat_info fat_info_t
char name[256]
Definition: fat_internal.h:171
uint16_t cluster_pointer
Definition: fat_internal.h:129
int fat_seek_file(open_file_descriptor *ofd, long offset, int whence)
Definition: fat_functions.c:129
Definition: fat_internal.h:98
unsigned int addr_data
Definition: fat_internal.h:193
uint32_t volume_id
Definition: fat_internal.h:66
Definition: fat_internal.h:62
fat_date_t last_access_date
Definition: fat_internal.h:125
unsigned char uint8_t
Definition: types.h:34
int fat_stat(fs_instance_t *instance, const char *path, struct stat *stbuf)
directory_t * open_root_dir(fat_fs_instance_t *instance)
Definition: fat_internal.c:191
Definition: fat_internal.h:76
Informations sur un noeud.
Definition: kstat.h:75
Definition: fat_internal.h:204
uint8_t sectors_per_cluster
Definition: fat_internal.h:46
Definition: fd_types.h:49
Structure fille d'un dentry_t qui ajoute quelques données.
Definition: fat_internal.h:225
uint32_t mode_t
Definition: kstat.h:63
uint8_t seq_number
Definition: fat_internal.h:138
int ssize_t
Definition: types.h:44
int first_cluster
Definition: fat_internal.h:216
uint8_t create_time_ms
Definition: fat_internal.h:121
int fat_open(open_file_descriptor *ofd)
Definition: fat_functions.c:287
struct _fat_extra_data_t fat_extra_data_t
Données supplémentaires qui sont ajoutés à l'ofd lors du open.
unsigned long int uint32_t
Definition: types.h:36
void umount_FAT(fs_instance_t *instance)
Definition: fat.c:145
uint8_t reserved
Definition: fat_internal.h:141
unsigned int addr_root_dir
Definition: fat_internal.h:192
uint8_t checksum
Definition: fat_internal.h:142
uint16_t total_sectors_16
Definition: fat_internal.h:50
Definition: fat_internal.h:154
blkdev_read_t read_data
Definition: fat_internal.h:208
fat_date_t create_date
Definition: fat_internal.h:124
blkdev_write_t write_data
Definition: fat_internal.h:209
uint16_t reserved_sector_count
Definition: fat_internal.h:47
Definition: vfs.h:104
uint8_t reserved
Definition: fat_internal.h:120
Definition: vga_modes.h:37
Definition: fd_types.h:91
Definition: fat_internal.h:42
fat_info_t fat_info
Definition: fat_internal.h:207
uint16_t cluster_pointer
Definition: fat_internal.h:144
uint8_t table_count
Definition: fat_internal.h:48
uint8_t buffer[512]
Definition: fat_internal.h:219
uint16_t table_size_16
Definition: fat_internal.h:52
Données supplémentaires qui sont ajoutés à l'ofd lors du open.
Definition: fat_internal.h:215
fs_instance_t super
Definition: fat_internal.h:205
time_t access_time
Definition: fat_internal.h:158
uint8_t reserved
Definition: fat_internal.h:64