37 lines
953 B
C
37 lines
953 B
C
|
#ifndef ATA_PIO
|
||
|
#define ATA_PIO
|
||
|
#include <stdint.h>
|
||
|
#include <ports.h>
|
||
|
|
||
|
// register stuff
|
||
|
#define ATA_IO_BASE 0x1F0
|
||
|
|
||
|
#define ATA_CONTROL_BASE 0x3F0
|
||
|
|
||
|
#define ATA_SECONDARY_OFFSET 128
|
||
|
|
||
|
#define ATA_DATA_REGISTER 0
|
||
|
#define ATA_ERROR_REGISTER 1
|
||
|
#define ATA_FEATURES_REGISTER 1
|
||
|
#define ATA_SECTOR_COUNT_REGISTER 2
|
||
|
#define ATA_SECTOR_REGISTER 3
|
||
|
#define ATA_CYL_LOW_REGISTER 4
|
||
|
#define ATA_CYL_HIGH_REGISTER 5
|
||
|
#define ATA_DRIVE_REGISTER 6
|
||
|
#define ATA_STATUS_REGISTER 7
|
||
|
#define ATA_COMMAND_REGISTER 7
|
||
|
|
||
|
#define ATA_ALTERNATE_STATUS_REGISTER 0
|
||
|
#define ATA_DEVICE_CONTROL_REGISTER 0
|
||
|
#define ATA_DRIVE_ADDRESS_REGISTER 1
|
||
|
|
||
|
// bitfield stuff
|
||
|
|
||
|
// declarations
|
||
|
int ata_init(uint8_t bus, uint8_t drive);
|
||
|
int ata_read(uint8_t bus, uint8_t drive, uint16_t* buf, uint16_t sectors, uint16_t lba_high, uint32_t lba_low);
|
||
|
int ata_write(uint8_t bus, uint8_t drive, uint16_t* buf, uint16_t sectors, uint16_t lba_high, uint32_t lba_low);
|
||
|
extern uint16_t ata_identify[256];
|
||
|
|
||
|
#endif
|