/* * storage.h * * Created on: Aug 23, 2011 * Author: Tiberiu */ #ifndef STORAGE_H_ #define STORAGE_H_ #include // Storage device typedef struct { char MountPointName[32];// E.g. "fd0"; you should avoid spaces, or special chars, or otherwise get weird paths like "Mom's floppy\virus.exe" uint32 DeviceID; // Autocompleted by VFS uint32 BlockSize; // E.g. sector size uint32 BlockCount; // How many blocks are loaded in memory per read /******************************************************** * READ DATA * * Params: * * > offset: read starting from block ~ * * Returns: address to data, NULL for error * ********************************************************/ uint32 (*ReadData) (uint32 offset); /******************************************************** * WRITE DATA * * Params: * * > offset: write starting from block ~ * * > address: where to write from * * Returns: NULL for error * ********************************************************/ uint32 (*WriteData) (uint32 offset, uint32 address); uint32 FileSystemID; // Autocompleted by 'mount'... at least should be } StorageDevice; typedef struct { uint32 FileSystemID; // Autocompleted by VFS /******************************************************** * DETECT IF THIS IS THE FS ON STORAGE DEVICE * * Params: * * > *s: Pointer to device info & routines * * Returns: positive if match, NULL otherwise * ********************************************************/ uint32 (*Detect) (StorageDevice *s); uint32 (*Open) (StorageDevice *s, string path); uint32 (*CreateNode) (StorageDevice *s, string path); uint32 (*DeleteNode) (StorageDevice *s, string path); } FileSystem; extern void ConvertLbaToChs(uint32 SectorsPerTrack, uint32 lba, uint32 *cyl, uint32 *head, uint32 *sector); #endif /* STORAGE_H_ */