#ifndef HARD_DRIVE_H #define HARD_DRIVE_H #define IDE_DATA_REGISTER 0 #define IDE_ERROR_REGISTER 1 #define IDE_SECTOR_COUNT_REGISTER 2 #define IDE_SECTOR_NUMBER_REGISTER 3 #define IDE_CYLINDER_LOW_REGISTER 4 #define IDE_CYLINDER_HIGH_REGISTER 5 // sector size, drive, head #define IDE_SDH_REGISTER 6 #define IDE_STATUS_REGISTER 7 #define IDE_COMMAND_REGISTER 7 #define IDE_ALTERNATE_STATUS_CONTROL_REGISTER 0 #define IDE_DRIVE_ADDRESS_CONTROL_REGISTER 1 #define IDE_STATUS_BUSY 0x80 #define IDE_STATUS_READY 0x40 #define IDE_STATUS_WRITE_FAULT 0x20 #define IDE_STATUS_SEEK_COMPLETE 0x10 #define IDE_STATUS_DATA_REQUEST 0x08 #define IDE_STATUS_CORRECTED_DATA 0x04 #define IDE_STATUS_INDEX 0x02 #define IDE_STATUS_ERROR 0x01 #define IDE_IDENTIFY_COMMAND 0xEC #include <list.h> #include <pci.h> #include <stdint.h> typedef struct HardDrive { char *model; uint32_t size; void *interface; void (*access)(struct HardDrive *, uint32_t, void *, uint8_t, uint8_t); // todo: mount point } HardDrive; extern void initializeIDEDrive(PciDevice *, ListElement **); extern void scanHardDrives(); #endif