| // 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_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 |