From 34bfcf871938e6f2cb15bc91507e4737edc1b4c6 Mon Sep 17 00:00:00 2001 From: Abdur-Rahman Mansoor Date: Sun, 9 Jun 2024 14:57:42 -0400 Subject: [PATCH] fix nvme_identify and irq_handler --- drivers/nvme/nvme.asm | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/nvme/nvme.asm b/drivers/nvme/nvme.asm index ae8e8e1..648c444 100644 --- a/drivers/nvme/nvme.asm +++ b/drivers/nvme/nvme.asm @@ -155,7 +155,7 @@ proc nvme_identify stdcall, pci:dword, nsid:dword, dptr:dword, cid:word, cns:byt mov dword [esi + SQ_ENTRY.dptr], eax movzx eax, [cid] shl eax, 16 - or dword [esi + SQ_ENTRY.cdw0], ADM_CMD_IDENTIFY + mov dword [esi + SQ_ENTRY.cdw0], ADM_CMD_IDENTIFY or dword [esi + SQ_ENTRY.cdw0], eax mov al, [cns] mov byte [esi + SQ_ENTRY.cdw10], al @@ -572,7 +572,7 @@ proc nvme_init stdcall, pci:dword mov dword [dptr], eax invoke GetPhysAddr ; pci:dword, nsid:dword, dptr:dword, cid:word, cns:byte - stdcall nvme_identify, [pci], 0, eax, 0, CNS_IDCS + stdcall nvme_identify, [pci], 0, eax, 2, CNS_IDCS xor eax, eax inc eax @@ -742,11 +742,10 @@ proc irq_handler mov esi, dword [esi + pcidev.io_addr] mov edi, dword [edi + pcidev.cq_ptr] mov dword [esi + NVME_MMIO.INTMS], 0x1 - mov eax, dword [edi + CQ_ENTRY.sqid] - DEBUGF DBG_INFO, "(NVMe) SQID: %u\n", eax - mov eax, dword [edi + CQ_ENTRY.status] - DEBUGF DBG_INFO, "(NVMe) Status: %x\n", eax - test al, al + mov ax, word [edi + CQ_ENTRY.status] + and ax, not CQ_PHASE_TAG ; ignore phase tag bit + DEBUGF DBG_INFO, "(NVMe) Status: %x\n", ax + test al, al ; check status code (0 on success) jz @f ; error occurred