mirror of
https://git.missingno.dev/kolibrios-nvme-driver/
synced 2025-01-08 22:16:13 +01:00
fix: remove long delay after set features cmd
This also fixes the `nvme_cmd_wait` function.
This commit is contained in:
parent
ca5ccaa86b
commit
6360db0733
@ -566,15 +566,16 @@ proc nvme_init stdcall, pci:dword
|
|||||||
mov eax, (NVM_ASQS - 1) or ((NVM_ACQS - 1) shl 16) ; CDW11 (set the number of queues we want)
|
mov eax, (NVM_ASQS - 1) or ((NVM_ACQS - 1) shl 16) ; CDW11 (set the number of queues we want)
|
||||||
stdcall set_features, [pci], NULLPTR, FID_NUMBER_OF_QUEUES, eax
|
stdcall set_features, [pci], NULLPTR, FID_NUMBER_OF_QUEUES, eax
|
||||||
mov esi, dword [p_nvme_devices]
|
mov esi, dword [p_nvme_devices]
|
||||||
stdcall nvme_wait, dword [esi + pcidev.io_addr]
|
;stdcall nvme_wait, dword [esi + pcidev.io_addr]
|
||||||
;stdcall nvme_cmd_wait, [pci], 0, 1
|
stdcall nvme_cmd_wait, [pci], 0, 1
|
||||||
mov esi, dword [esi + pcidev.queue_entries]
|
mov esi, dword [esi + pcidev.queue_entries]
|
||||||
mov esi, dword [esi + NVM_QUEUE_ENTRY.cq_ptr]
|
mov esi, dword [esi + NVM_QUEUE_ENTRY.cq_ptr]
|
||||||
mov eax, dword [esi + sizeof.CQ_ENTRY + CQ_ENTRY.cdw0]
|
mov eax, dword [esi + sizeof.CQ_ENTRY + CQ_ENTRY.cdw0]
|
||||||
test ax, ax
|
DEBUGF DBG_INFO, "(NVMe) Set Features CDW0: 0x%x\n", eax
|
||||||
|
test ax, ax ; Number of I/O Submission Queues allocated
|
||||||
jz .exit_fail
|
jz .exit_fail
|
||||||
shl eax, 16
|
shl eax, 16
|
||||||
test ax, ax
|
test ax, ax ; Number of I/O Completion Queues allocated
|
||||||
jnz .exit_fail
|
jnz .exit_fail
|
||||||
|
|
||||||
; Create I/O Queues
|
; Create I/O Queues
|
||||||
@ -786,13 +787,16 @@ proc nvme_cmd_wait stdcall, pci:dword, y:byte, cid:word
|
|||||||
push esi
|
push esi
|
||||||
mov esi, [pci]
|
mov esi, [pci]
|
||||||
movzx ecx, [cid]
|
movzx ecx, [cid]
|
||||||
imul ecx, sizeof.CQ_ENTRY
|
movzx edx, [y]
|
||||||
|
imul edx, sizeof.NVM_QUEUE_ENTRY
|
||||||
mov esi, dword [esi + pcidev.queue_entries]
|
mov esi, dword [esi + pcidev.queue_entries]
|
||||||
|
lea esi, [esi + edx]
|
||||||
|
imul ecx, sizeof.CQ_ENTRY
|
||||||
mov esi, dword [esi + NVM_QUEUE_ENTRY.cq_ptr]
|
mov esi, dword [esi + NVM_QUEUE_ENTRY.cq_ptr]
|
||||||
|
|
||||||
; WARNING: status bit flips on each pass, count for this later...
|
; WARNING: status bit flips on each pass, count for this later...
|
||||||
@@:
|
@@:
|
||||||
test byte [esi + CQ_ENTRY.status], CQ_PHASE_TAG
|
test byte [esi + ecx + CQ_ENTRY.status], CQ_PHASE_TAG
|
||||||
jz @b
|
jz @b
|
||||||
pop esi
|
pop esi
|
||||||
ret
|
ret
|
||||||
|
Loading…
Reference in New Issue
Block a user