feat: asynchronized SATA IO
[lunaix-os.git] / lunaix-os / includes / hal / ahci / ahci.h
index 0494181d03efc7ecda592091b63cb69a9eefbc89..ea63a9c19412d3613b376fa90ddd00d568483039 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __LUNAIX_AHCI_H
 #define __LUNAIX_AHCI_H
 
+#include "hba.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
-
 /**
  * @brief 初始化AHCI与HBA
  *
@@ -26,4 +24,36 @@ ahci_init();
 void
 ahci_list_device();
 
+unsigned int
+ahci_get_port_usage();
+
+struct hba_port*
+ahci_get_port(unsigned int index);
+
+void
+ahci_parse_dev_info(struct hba_device* dev_info, uint16_t* data);
+
+void
+ahci_parsestr(char* str, uint16_t* reg_start, int size_word);
+
+/**
+ * @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_post(struct hba_port* port, struct hba_cmd_state* state, int slot);
+
 #endif /* __LUNAIX_AHCI_H */