matos/drivers/ata.h

53 lines
1.2 KiB
C

#pragma once
#include "stdarg.h"
#define ATA_PIO_REG_DATA 0
#define ATA_PIO_REG_ERR 1
#define ATA_PIO_REG_FEAT 1
#define ATA_PIO_SEC_COUNT 2
#define ATA_PIO_LBALO 3
#define ATA_PIO_LBAMID 4
#define ATA_PIO_CYL_LOW 4
#define ATA_PIO_LBAHI 5
#define ATA_PIO_CYL_HI 5
#define ATA_PIO_DRIVE 6
#define ATA_PIO_STATUS 7
#define ATA_PIO_CMD 7
#define ATA_PIO_CMD_IDENTIFY 0xEC
#define ATA_PIO_ERROR_ADDR_MARK_NOT_FOUND 0
#define ATA_PIO_ERROR_TRACK_ZERO_NOT_FOUND 1
#define ATA_PIO_ERROR_ABORTED 2
#define ATA_PIO_ERROR_MEDIA_CHANGE_REQUEST 3
#define ATA_PIO_ERROR_ID_NOT_FOUND 4
#define ATA_PIO_ERROR_MEDIA_CHANGED 5
#define ATA_PIO_ERROR_UNCORRECTABLE_DATA 6
#define ATA_PIO_ERROR_BAD_BLOCK 7
#define ATA_PIO_STATUS_REG_ERR (1<<0)
#define ATA_PIO_STATUS_IDX (1<<1)
#define ATA_PIO_STATUS_CORP (1<<2)
#define ATA_PIO_STATUS_DRQ (1<<3)
#define ATA_PIO_STATUS_SRV (1<<4)
#define ATA_PIO_STATUS_DRIVE_FAULT (1<<5)
#define ATA_PIO_STATUS_DRIVE_RDY (1<<6)
#define ATA_PIO_STATUS_DRIVE_BUSY (1<<7)
#define ATA_DEV_PATA 1
#define ATA_DEV_SATA 2
#define ATA_DEV_PATAPI 3
#define ATA_DEV_SATAPI 4
#define ATA_DEV_UNKNOWN 0
struct ata_drive {
int16_t base;
int16_t dev_ctl;
int status;
int isSlave;
};
int ATADectectType(struct ata_drive* drive);
int ATAInit();