12 #define HBA_RPBASE (0x40)
13 #define HBA_RPSIZE (0x80 >> 2)
21 #define HBA_RPxSSTS 10
22 #define HBA_RPxSCTL 11
23 #define HBA_RPxSERR 12
24 #define HBA_RPxSACT 13
26 #define HBA_RPxSNTF 15
29 #define HBA_PxCMD_FRE (1 << 4)
30 #define HBA_PxCMD_CR (1 << 15)
31 #define HBA_PxCMD_FR (1 << 14)
32 #define HBA_PxCMD_ST (1)
33 #define HBA_PxINTR_DMA (1 << 2)
34 #define HBA_PxINTR_D2HR (1)
35 #define HBA_PxTFD_ERR (1)
36 #define HBA_PxTFD_BSY (1 << 7)
37 #define HBA_PxTFD_DRQ (1 << 3)
39 #define HBA_RGHC_ACHI_ENABLE (1 << 31)
40 #define HBA_RGHC_INTR_ENABLE (1 << 1)
41 #define HBA_RGHC_RESET 1
43 #define HBA_RPxSSTS_PWR(x) (((x) >> 8) & 0xf)
44 #define HBA_RPxSSTS_IF(x) (((x) >> 4) & 0xf)
45 #define HBA_RPxSSTS_PHYSTATE(x) ((x)&0xf)
47 #define HBA_DEV_SIG_ATAPI 0xeb140101
48 #define HBA_DEV_SIG_ATA 0x00000101
50 #define __HBA_PACKED__ __attribute__((packed))
52 typedef unsigned int hba_reg_t;
54 #define HBA_CMDH_FIS_LEN(fis_bytes) (((fis_bytes) / 4) & 0x1f)
55 #define HBA_CMDH_ATAPI (1 << 5)
56 #define HBA_CMDH_WRITE (1 << 6)
57 #define HBA_CMDH_PREFETCH (1 << 7)
58 #define HBA_CMDH_R (1 << 8)
59 #define HBA_CMDH_CLR_BUSY (1 << 10)
60 #define HBA_CMDH_PRDT_LEN(entries) (((entries)&0xffff) << 16)
66 uint32_t transferred_size;
67 uint32_t cmd_table_base;
71 #define HBA_PRDTE_BYTE_CNT(cnt) ((cnt & 0x3FFFFF) | 0x1)
82 uint8_t command_fis[64];
83 uint8_t atapi_cmd[16];
84 uint8_t reserved[0x30];
85 struct hba_prdte entries[3];
88 #define HBA_DEV_FEXTLBA 1
89 #define HBA_DEV_FATAPI (1 << 1)
104 uint32_t alignment_offset;
105 uint32_t block_per_sec;
106 uint32_t capabilities;
110 int (*identify)(struct hba_port* port);
111 int (*read_buffer)(struct hba_port* port,
115 int (*write_buffer)(struct hba_port* port,
124 volatile hba_reg_t* regs;
126 struct hba_cmdh* cmdlst;
128 struct hba_device* device;
133 volatile hba_reg_t* base;
134 unsigned int ports_num;
135 unsigned int ports_bmp;
136 unsigned int cmd_slots;
137 unsigned int version;
138 struct hba_port* ports[32];
142 hba_prepare_cmd(struct hba_port* port,
143 struct hba_cmdt** cmdt,
144 struct hba_cmdh** cmdh,
148 #endif /* __LUNAIX_HBA_H */