2
0
mirror of https://git.missingno.dev/kolibrios-nvme-driver/ synced 2024-12-22 22:08:47 +01:00

feat: implement I/O read command

This commit is contained in:
Abdur-Rahman Mansoor 2024-07-01 13:56:00 -04:00
parent 2d1e0d4aa4
commit 383190e462

View File

@ -444,8 +444,8 @@ proc get_log_page stdcall, pci:dword, dptr:dword, lid:byte
endp
; See page 269-271 of the NVMe 1.4 specification for reference
proc nvme_write stdcall, pci:dword, qid:word, nsid:dword, dptr:dword, slba_lo:dword, slba_hi:dword, nlb:word
; See page 258-261 (read) and 269-271 (write) of the NVMe 1.4 specification for reference
proc nvme_io_rw stdcall, pci:dword, qid:word, nsid:dword, dptr:dword, slba_lo:dword, slba_hi:dword, nlb:word, opcode:dword
; TODO: Use IDENTC.NOIOB to construct read/write commands that don't
; cross the I/O boundary to achieve optimal performance
@ -454,7 +454,7 @@ proc nvme_write stdcall, pci:dword, qid:word, nsid:dword, dptr:dword, slba_lo:dw
sub esp, sizeof.SQ_ENTRY
stdcall memset, esp, 0, sizeof.SQ_ENTRY
movzx ecx, [qid]
stdcall set_cdw0, [pci], ecx, NVM_CMD_WRITE
stdcall set_cdw0, [pci], ecx, [opcode]
mov dword [esp + SQ_ENTRY.cdw0], eax ; CDW0
mov eax, [dptr]
mov dword [esp + SQ_ENTRY.dptr], eax
@ -462,7 +462,7 @@ proc nvme_write stdcall, pci:dword, qid:word, nsid:dword, dptr:dword, slba_lo:dw
mov dword [esp + SQ_ENTRY.nsid], eax
mov eax, [slba_lo]
mov dword [esp + SQ_ENTRY.cdw10], eax
mov eax, [slba_hi] ; SLBA + 32 (fix later)
mov eax, [slba_hi]
mov dword [esp + SQ_ENTRY.cdw11], eax
movzx eax, [nlb]
mov word [esp + SQ_ENTRY.cdw12], ax
@ -473,7 +473,6 @@ proc nvme_write stdcall, pci:dword, qid:word, nsid:dword, dptr:dword, slba_lo:dw
endp
proc detect_nvme
invoke GetPCIList
@ -825,8 +824,11 @@ proc nvme_init stdcall, pci:dword
invoke KernelAlloc, 0x1000
test eax, eax
jz .exit_fail
mov edi, eax
;stdcall memcpy, eax, test_string, 50
invoke GetPhysAddr
stdcall nvme_write, [pci], 1, [esi + pcidev.nsid], eax, 0, 0, 1
stdcall nvme_io_rw, [pci], 1, [esi + pcidev.nsid], eax, 0, 0, 1, NVM_CMD_READ
DEBUGF DBG_INFO, "%s\n", edi
DEBUGF DBG_INFO, "nvme%u: Successfully initialized driver\n", [esi + pcidev.num]
xor eax, eax
inc eax