initial commit
[pfinal.git] / Routix / include / drivers / fat.h
blob8cf0e8322dc24f49c671d0bc146730944733dac5
1 /* floppy.h */
3 #ifndef __SYSTEM
4 #include "routix/system.h"
5 #endif
7 #ifndef __FAT12
8 #define __FAT12
10 //Macros para simplificar el uso de la funcion leer_escribir
11 #define leer_sector(sec,buf) leer_escribir(READ_SECTOR,sec,buf)
12 #define escribir_sector(sec,buf) leer_escribir(WRITE_SECTOR,sec,buf)
14 #define BOOTSECTOR 0
16 // Estructura utilizada para caracterizar una particion FAT
17 typedef struct dev_fat_t
19 word fat_size; //Cantidad de sectores que ocupa cada FAT
20 word fat_start; //Sector de comienzo de la FAT
21 byte cantidad_de_fats; //Cantidad de FATs por disco (geenralmente 2)
22 word root_dir_start; //Sector de comienzo del Directorio raiz
23 word root_dir_size; //Cantidad de sectores asignados al root
24 dword sectores_ocultos;
25 word sectores_totales; //cantidad total de sectores del disco
26 byte sectores_por_cluster;
27 word sector_size;
28 byte fat_levantada;
29 byte boot_leido; //Indica si el BPB ha sido leido y los parametros han sido cargados en las variables
30 }dev_fat_t;
33 // Estructura que contiene los campos principales de un BootSector tanto en FAT12 como FAT16 (son los primeros 62 bytes)
34 typedef struct boot_sector_t
36 unsigned BS_jmpBott: 24;
37 qword BS_OEMName;
38 unsigned BPB_BytsPerSec: 16;
39 unsigned BPB_SecPerClus: 8;
40 unsigned BPB_RsvdSecCnt: 16;
41 unsigned BPB_NumFATs: 8;
42 unsigned BPB_RootEntCnt: 16;
43 unsigned BPB_TotSec16: 16;
44 unsigned BPB_Media: 8;
45 unsigned BPB_FATSz16: 16;
46 unsigned BPB_SecPerTrk: 16;
47 unsigned BPB_NumHeads: 16;
48 unsigned BPB_HiddSec: 32;
49 unsigned BPB_TotSec32: 32;
50 unsigned BS_DrvNum: 8;
51 unsigned BS_Reserved1: 8;
52 unsigned BS_BootSig: 8;
53 unsigned BS_VolID: 32;
54 char BS_VolLab[11];
55 char BS_FilSysType[8];
56 }boot_sector_t;
59 //Estos son los datos que identifican a cada archivo dentro de un directorio
60 typedef struct fat12_entry_t
62 byte nombre[8];
63 byte extension[3];
64 byte atributo;
65 byte reservado[10];
66 word hora;
67 word fecha;
68 word sector; //Cluster de comienzo del archivo (relativo al final del ultimo sector de ROOT
69 dword size; //TamaƱo en bytes
70 }fat12_entry_t;
72 //Esta estructura es reciente. La idea es que con *fat12_data recoja la info del directorio, y que mediante la funcion
73 //fat_adapta_name la escriba en formato string dentro de nombre.
74 #define MAX_PATH_LEN 29
76 typedef struct fat12_entry_ext_t
78 fat12_entry_t fat12_data;
79 char nombre[MAX_PATH_LEN];
80 }fat12_entry_ext_t;
82 struct floppy_cache
84 dword sector;
85 byte bloque[512];
86 struct floppy_cache *next;
90 //Valores que puede tomar el 1er byte del campo nombre ( estructura dir_entry_t)
91 //Cualquier otro valor, significa el valor del primer caracter del nombre de archivo
92 #define FAT_EMPTY 0 // Campo aun no usado (luego del formateo)
93 #define FAT_SUBDIR 0x2E // El archivo es un directorio
94 #define FAT_DELETED 0xE5 // El archivo fue borrado
96 #define SECTOR_SIZE 512
99 // structura utlizada para generar una lista enlazada que apunta a bloques en memoria que contienen la FAT
100 // del floppy que se encuentra en la diskettera.
101 typedef struct fat_t
103 byte *bloque;
104 struct fat_t *next;
105 }fat_t;
108 //Tipo usado para mantener una lista enlazada con los sectores de un archivo contenidos en memoria
110 typedef struct file_loaded_t
112 byte *bloque; //Apunta a un sector
113 struct file_loaded_t *next;
115 } file_loaded_t;
118 int init_floppy_fs(void);
120 // Adapta un nombre de la forma fat (KERNEL BIN) a formato string: KERNEL.BIN\0
121 // asi es mas facil su comparacion, impresion y usos varios
122 void fat_adapta_name (byte *nombre_fat, byte *adaptado);
124 // Recibe un nombre de archivo, y lo busca en el disco. En caso negativo retorna NULL
125 fat12_entry_t *fat_file_find (char *nombre, fat12_entry_t *datos_archivo);
127 // Esta funcion recibe como parametro un numero de sector y mediante la FAT obtiene cual es el siguiente
128 int fat_next_sector ( dword sector_inicial );
130 void *floppy_cache (dword sector);
132 // Abrir un archivo desde un dispositivo con formato FAT12
133 int open_FAT12 (char *nombre, int fd);
136 #define DIR_FAT_VIRTUAL 0xF8000000
139 #endif