rk/include/kernel/ide.h

89 lines
2.7 KiB
C
Raw Normal View History

#ifndef RK_IDE_H_
#define RK_IDE_H_
2024-05-21 22:07:04 -04:00
2024-05-23 01:31:32 -04:00
#include <stdint.h>
2024-05-21 22:07:04 -04:00
enum IDE_MODE {
ISA_ONLY = 0x00,
PCI_ONLY = 0x05,
ISA_CAN_SWITCH = 0x0a,
PCI_CAN_SWITCH = 0x0f,
ISA_ONLY_BUS_MASTERING = 0x80,
PCI_ONLY_BUS_MASTERING = 0x85,
ISA_CAN_SWITCH_BUS_MASTERING = 0x8a,
PCI_CAN_SWITCH_BUS_MASTERING = 0x8f,
};
2024-05-23 01:31:32 -04:00
#define ATA_PRIMARY 0
#define ATA_SECONDARY 1
#define ATA_MASTER 0
#define ATA_SLAVE 1
#define ATA_PRIMARY_IO 0x1F0
#define ATA_SECONDARY_IO 0x170
#define ATA_PRIMARY_DCR_AS 0x3F6
#define ATA_SECONDARY_DCR_AS 0x376
#define ATA_PRIMARY_IRQ 14
#define ATA_SECONDARY_IRQ 15
#define ATA_REG_DATA 0x00
#define ATA_REG_ERROR 0x01
#define ATA_REG_FEATURES 0x01
#define ATA_REG_SECCOUNT0 0x02
#define ATA_REG_LBA0 0x03
#define ATA_REG_LBA1 0x04
#define ATA_REG_LBA2 0x05
#define ATA_REG_HDDEVSEL 0x06
#define ATA_REG_COMMAND 0x07
#define ATA_REG_STATUS 0x07
#define ATA_REG_SECCOUNT1 0x08
#define ATA_REG_LBA3 0x09
#define ATA_REG_LBA4 0x0A
#define ATA_REG_LBA5 0x0B
#define ATA_REG_CONTROL 0x0C
#define ATA_REG_ALTSTATUS 0x0C
#define ATA_REG_DEVADDRESS 0x0D
#define ATA_CMD_READ_PIO 0x20
#define ATA_CMD_READ_PIO_EXT 0x24
#define ATA_CMD_READ_DMA 0xC8
#define ATA_CMD_READ_DMA_EXT 0x25
#define ATA_CMD_WRITE_PIO 0x30
#define ATA_CMD_WRITE_PIO_EXT 0x34
#define ATA_CMD_WRITE_DMA 0xCA
#define ATA_CMD_WRITE_DMA_EXT 0x35
#define ATA_CMD_CACHE_FLUSH 0xE7
#define ATA_CMD_CACHE_FLUSH_EXT 0xEA
#define ATA_CMD_PACKET 0xA0
#define ATA_CMD_IDENTIFY_PACKET 0xA1
#define ATA_CMD_IDENTIFY 0xEC
#define ATA_SR_BSY 0x80 // Busy
#define ATA_SR_DRDY 0x40 // Drive ready
#define ATA_SR_DF 0x20 // Drive write fault
#define ATA_SR_DSC 0x10 // Drive seek complete
#define ATA_SR_DRQ 0x08 // Data request ready
#define ATA_SR_CORR 0x04 // Corrected data
#define ATA_SR_IDX 0x02 // Index
#define ATA_SR_ERR 0x01 // Error
#define ATA_IDENT_DEVICETYPE 0
#define ATA_IDENT_CYLINDERS 2
#define ATA_IDENT_HEADS 6
#define ATA_IDENT_SECTORS 12
#define ATA_IDENT_SERIAL 20
#define ATA_IDENT_MODEL 54
#define ATA_IDENT_CAPABILITIES 98
#define ATA_IDENT_FIELDVALID 106
#define ATA_IDENT_MAX_LBA 120
#define ATA_IDENT_COMMANDSETS 164
#define ATA_IDENT_MAX_LBA_EXT 200
2024-05-22 00:32:44 -04:00
2024-05-23 01:31:32 -04:00
uint16_t ide_select_drive(uint8_t bus, uint8_t drive);
uint8_t ide_identify(uint8_t bus, uint8_t drive, uint16_t *ide_buf);
uint8_t ata_read_sector(uint8_t bus, uint8_t drive, uint32_t lba, uint8_t *buf);
2024-05-22 00:32:44 -04:00
2024-05-21 22:07:04 -04:00
#endif