1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
// 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
|