update readme
[lunaix-os.git] / lunaix-os / hal / ahci / utils.c
index 96d163b93585ed8a0f7a273e25506f07a4d2b631..f11ffb4fd05325cff6e31879b15d2483c143e2b7 100644 (file)
@@ -85,4 +85,19 @@ ahci_try_send(struct hba_port* port, int slot)
     hba_clear_reg(port->regs[HBA_RPxIS]);
 
     return retries < MAX_RETRY;
+}
+
+void
+ahci_post(struct hba_port* port, struct hba_cmd_state* state, int slot)
+{
+    int bitmask = 1 << slot;
+
+    // 确保端口是空闲的
+    wait_until(!(port->regs[HBA_RPxTFD] & (HBA_PxTFD_BSY | HBA_PxTFD_DRQ)));
+
+    hba_clear_reg(port->regs[HBA_RPxIS]);
+
+    port->cmdctx.issued[slot] = state;
+    port->cmdctx.tracked_ci |= bitmask;
+    port->regs[HBA_RPxCI] |= bitmask;
 }
\ No newline at end of file