#ifndef __LUNAIX_AHCI_H
#define __LUNAIX_AHCI_H
+#include "hba.h"
+#include <asm-generic/isrm.h>
+
/*
* Macro naming rule:
* HBA_R[xxx]
#define AHCI_HBA_CLASS 0x10601
-#define ATA_IDENTIFY_DEVICE 0xec
-#define ATA_IDENTIFY_PAKCET_DEVICE 0xa1
-#define ATA_PACKET 0xa0
+struct ahci_driver
+{
+ struct llist_header ahci_drvs;
+ struct ahci_hba hba;
+ int id;
+};
+
+struct ahci_driver_param
+{
+ ptr_t mmio_base;
+ size_t mmio_size;
+ int ahci_iv;
+};
+
+void
+ahci_parse_dev_info(struct hba_device* dev_info, u16_t* data);
+
+void
+ahci_parsestr(char* str, u16_t* reg_start, int size_word);
/**
- * @brief 初始化AHCI与HBA
+ * @brief Issue a HBA command (synchronized)
*
+ * @param port
+ * @param slot
+ * @return int
+ */
+int
+ahci_try_send(struct hba_port* port, int slot);
+
+/**
+ * @brief Issue a HBA command (asynchronized)
+ *
+ * @param port
+ * @param state
+ * @param slot
*/
void
-ahci_init();
+ahci_post(struct hba_port* port, struct hba_cmd_state* state, int slot);
+
+struct ahci_driver*
+ahci_driver_init(struct ahci_driver_param* param);
void
-ahci_list_device();
+ahci_hba_isr(const struct hart_state* hstate);
#endif /* __LUNAIX_AHCI_H */