#ifndef __LUNAIX_SATA_H
#define __LUNAIX_SATA_H
-#include <stdint.h>
+#include <hal/ahci/hba.h>
#define SATA_REG_FIS_D2H 0x34
#define SATA_REG_FIS_H2D 0x27
#define SATA_REG_FIS_COMMAND 0x80
-#define SATA_LBA_COMPONENT(lba, offset) ((((lba_lo) >> (offset)) & 0xff))
+#define SATA_LBA_COMPONENT(lba, offset) ((((lba) >> (offset)) & 0xff))
+
+#define ATA_IDENTIFY_DEVICE 0xec
+#define ATA_IDENTIFY_PAKCET_DEVICE 0xa1
+#define ATA_PACKET 0xa0
+#define ATA_READ_DMA_EXT 0x25
+#define ATA_READ_DMA 0xc8
+#define ATA_WRITE_DMA_EXT 0x35
+#define ATA_WRITE_DMA 0xca
+
+#define MAX_RETRY 2
struct sata_fis_head
{
uint8_t lba0, lba8, lba16;
uint8_t dev;
uint8_t lba24, lba32, lba40;
- uint8_t reserved1;
+ uint8_t feature;
uint16_t count;
void
sata_create_fis(struct sata_reg_fis* cmd_fis,
uint8_t command,
- uint32_t lba_lo,
- uint32_t lba_hi,
+ uint64_t lba,
uint16_t sector_count);
+void
+sata_submit(struct hba_device* dev, struct blkio_req* io_req);
+
+void
+sata_read_error(struct hba_port* port);
#endif /* __LUNAIX_SATA_H */