X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/af2b981c4cc6f8e4b7050f0401dc225606836ca0..839da03f6ebe838d780e52190318d4c3048990f1:/lunaix-os/includes/hal/ahci.h?ds=sidebyside diff --git a/lunaix-os/includes/hal/ahci.h b/lunaix-os/includes/hal/ahci.h index 438fa5c..dc30ca8 100644 --- a/lunaix-os/includes/hal/ahci.h +++ b/lunaix-os/includes/hal/ahci.h @@ -10,6 +10,8 @@ * All registers offset are 0 based index of a DWORD array */ +#define AHCI_HBA_CLASS 0x10601 + #define HBA_RCAP 0 #define HBA_RGHC 1 #define HBA_RIS 2 @@ -17,6 +19,7 @@ #define HBA_RVER 4 #define HBA_RPBASE (0x40) +#define HBA_RPSIZE (0x80 >> 2) #define HBA_RPxCLB 0 #define HBA_RPxFB 2 #define HBA_RPxIS 4 @@ -32,18 +35,46 @@ #define HBA_RPxSNTF 15 #define HBA_RPxFBS 16 +#define HBA_PxCMD_FRE (1 << 4) +#define HBA_PxCMD_ST (1) +#define HBA_PxINTR_DMA (1 << 2) +#define HBA_PxINTR_D2HR (1) + +#define HBA_RGHC_ACHI_ENABLE (1 << 31) +#define HBA_RGHC_INTR_ENABLE (1 << 1) +#define HBA_RGHC_RESET 1 + +#define HBA_RPxSSTS_PWR(x) (((x) >> 8) & 0xf) +#define HBA_RPxSSTS_IF(x) (((x) >> 4) & 0xf) +#define HBA_RPxSSTS_PHYSTATE(x) ((x)&0xf) + typedef unsigned int hba_reg_t; +struct ahci_port +{ + hba_reg_t* regs; + unsigned int ssts; + void* cmdlstv; + void* fisv; +}; + struct ahci_hba { volatile hba_reg_t* base; unsigned int ports_num; - unsigned int port_map; + unsigned int cmd_slots; unsigned int version; - hba_reg_t* ports[32]; + struct ahci_port* ports[32]; }; +/** + * @brief 初始化AHCI与HBA + * + */ void ahci_init(); +void +ahci_list_device(); + #endif /* __LUNAIX_AHCI_H */