/***************************************************************************** Sector-level disk I/O code for various OSes This code is public domain (no copyright). You can do whatever you want with it. EXPORTS (API): DEBUG(), BPS, LE16(), LE32(), disk_t, int read_sector(disk_t *disk, unsigned long lba, unsigned char *buf); int write_sector(disk_t *disk, unsigned long lba, unsigned char *buf); int is_fat_bootsector(unsigned char *buf); int open_disk(disk_t *disk, unsigned drive_num); *****************************************************************************/ #ifndef __DISKIO_H #define __DISKIO_H #ifdef __cplusplus extern "C" { #endif #if 0 #define DEBUG(X) X #else #define DEBUG(X) /* nothing */ #endif #define BPS 512 /* bytes/sector */ /* these assume little endian CPU like x86 */ #define LE16(X) *(uint16_t *)(X) #define LE32(X) *(uint32_t *)(X) /* STDINT.H these assume sizeof(short)==2 and sizeof(long)==4 */ typedef unsigned short uint16_t; typedef unsigned long uint32_t; typedef struct { unsigned char drive_num; /* CHS disk geometry (heads and sectors are used only if use_lba==0) */ unsigned use_lba : 1; unsigned char heads; unsigned char sectors; /* LBA sector address of partition start (hard disk only) */ unsigned long partition_start; } disk_t; /* these are in DISKIO.C */ int read_sector(disk_t *disk, unsigned long lba, unsigned char *buf); int write_sector(disk_t *disk, unsigned long lba, unsigned char *buf); int is_fat_bootsector(unsigned char *buf); int open_disk(disk_t *disk, unsigned drive_num); #ifdef __cplusplus } #endif #endif