// Standard disk BIOS definitions. #ifndef __DISK_H #define __DISK_H #include "types.h" // u8 #define DISK_RET_SUCCESS 0x00 #define DISK_RET_EPARAM 0x01 #define DISK_RET_EADDRNOTFOUND 0x02 #define DISK_RET_EWRITEPROTECT 0x03 #define DISK_RET_ECHANGED 0x06 #define DISK_RET_EBOUNDARY 0x09 #define DISK_RET_EBADTRACK 0x0c #define DISK_RET_ECONTROLLER 0x20 #define DISK_RET_ETIMEOUT 0x80 #define DISK_RET_ENOTLOCKED 0xb0 #define DISK_RET_ELOCKED 0xb1 #define DISK_RET_ENOTREMOVABLE 0xb2 #define DISK_RET_ETOOMANYLOCKS 0xb4 #define DISK_RET_EMEDIA 0xC0 #define DISK_RET_ENOTREADY 0xAA /**************************************************************** * Interface structs ****************************************************************/ // Bios disk structures. struct int13ext_s { u8 size; u8 reserved; u16 count; struct segoff_s data; u64 lba; } PACKED; // DPTE definition struct dpte_s { u16 iobase1; u16 iobase2; u8 prefix; u8 unused; u8 irq; u8 blkcount; u8 dma; u8 pio; u16 options; u16 reserved; u8 revision; u8 checksum; }; // Disk Physical Table definition struct int13dpt_s { u16 size; u16 infos; u32 cylinders; u32 heads; u32 spt; u64 sector_count; u16 blksize; struct segoff_s dpte; u16 key; u8 dpi_length; u8 reserved1; u16 reserved2; u8 host_bus[4]; u8 iface_type[8]; u64 iface_path; union { struct { u64 device_path; u8 reserved3; u8 checksum; } phoenix; struct { u64 device_path[2]; u8 reserved3; u8 checksum; } t13; }; } PACKED; // Floppy info struct fdpt_s { u16 cylinders; u8 heads; u8 a0h_signature; u8 phys_sectors; u16 precompensation; u8 reserved; u8 drive_control_byte; u16 phys_cylinders; u8 phys_heads; u16 landing_zone; u8 sectors; u8 checksum; } PACKED; // Floppy "Disk Base Table" struct floppy_dbt_s { u8 specify1; u8 specify2; u8 shutoff_ticks; u8 bps_code; u8 sectors; u8 interblock_len; u8 data_len; u8 gap_len; u8 fill_byte; u8 settle_time; u8 startup_time; } PACKED; struct floppy_ext_dbt_s { struct floppy_dbt_s dbt; // Extra fields u8 max_track; u8 data_rate; u8 drive_type; } PACKED; /**************************************************************** * Master boot record ****************************************************************/ struct packed_chs_s { u8 heads; u8 sptcyl; u8 cyllow; } PACKED; struct partition_s { u8 status; struct packed_chs_s first; u8 type; struct packed_chs_s last; u32 lba; u32 count; } PACKED; struct mbr_s { u8 code[440]; // 0x01b8 u32 diskseg; // 0x01bc u16 null; // 0x01be struct partition_s partitions[4]; // 0x01fe u16 signature; } PACKED; #define MBR_SIGNATURE 0xaa55 /**************************************************************** * ElTorito CDROM interface ****************************************************************/ struct eltorito_s { u8 size; u8 media; u8 emulated_drive; u8 controller_index; u32 ilba; u16 device_spec; u16 buffer_segment; u16 load_segment; u16 sector_count; struct packed_chs_s chs; } PACKED; #endif // disk.h