mirror of
https://git.missingno.dev/kolibrios-nvme-driver/
synced 2025-02-01 02:00:13 +01:00
refactor: fix sqytdbl_write
and dont use write_admin_cmd
for admin command submissions anymore
This commit is contained in:
parent
c6c6aea5ea
commit
38b93a8240
@ -140,7 +140,7 @@ proc nvme_identify stdcall, pci:dword, nsid:dword, dptr:dword, cns:byte
|
||||
mov dword [esp + SQ_ENTRY.cdw0], eax
|
||||
mov al, [cns]
|
||||
mov byte [esp + SQ_ENTRY.cdw10], al
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
@ -179,7 +179,7 @@ proc create_io_completion_queue stdcall, pci:dword, prp1:dword, qid:dword, ien:b
|
||||
or eax, 0x1 ; CDW11.PC
|
||||
; Don't set CDW11.IV since we're not using MSI-X or MSI vector
|
||||
mov dword [esp + SQ_ENTRY.cdw11], eax
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
|
||||
@ -202,7 +202,7 @@ proc create_io_submission_queue stdcall, pci:dword, prp1:dword, qid:dword, cqid:
|
||||
or eax, 0x1 ; CDW11.PC (always set this to 1 as some devices may not support non-contiguous pages)
|
||||
; TODO: Set CDW10.QPRIO
|
||||
mov dword [esp + SQ_ENTRY.cdw11], eax
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
|
||||
@ -219,7 +219,7 @@ proc abort stdcall, pci:dword, cid:word, sqid:word
|
||||
shl eax, 16
|
||||
or eax, word [sqid]
|
||||
mov dword [esp + SQ_ENTRY.cdw10], eax
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
|
||||
@ -240,7 +240,7 @@ proc set_features stdcall, pci:dword, dptr:dword, fid:byte, cdw11:dword
|
||||
mov dword [esp + SQ_ENTRY.cdw10], eax
|
||||
mov eax, [cdw11]
|
||||
mov dword [esp + SQ_ENTRY.cdw11], eax
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
|
||||
@ -255,7 +255,7 @@ proc delete_io_completion_queue stdcall, pci:dword, qid:word
|
||||
mov dword [esp + SQ_ENTRY.cdw0], eax
|
||||
mov ax, [qid]
|
||||
mov word [esp + SQ_ENTRY.cdw10], ax
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
|
||||
@ -276,7 +276,7 @@ proc get_features stdcall, pci:dword, dptr:dword, sel:byte, fid:byte
|
||||
mov eax, [dptr]
|
||||
mov dword [esp + SQ_ENTRY.dptr], eax
|
||||
; TODO: Implement CDW14.UUID?
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
|
||||
@ -291,7 +291,7 @@ proc delete_io_submission_queue stdcall, pci:dword, qid:word
|
||||
mov dword [esp + SQ_ENTRY.cdw0], eax
|
||||
mov ax, [qid]
|
||||
mov word [esp + SQ_ENTRY.cdw10], ax
|
||||
stdcall write_admin_cmd, [pci], esp
|
||||
stdcall sqytdbl_write, [pci], ADMIN_QUEUE, esp
|
||||
add esp, sizeof.SQ_ENTRY
|
||||
ret
|
||||
|
||||
@ -767,12 +767,14 @@ proc sqytdbl_write stdcall, pci:dword, y:word, cmd:dword
|
||||
|
||||
push ebx esi edi
|
||||
mov edi, [pci]
|
||||
mov edi, dword [edi + pcidev.queue_entries]
|
||||
movzx ecx, [y]
|
||||
imul ecx, sizeof.NVM_QUEUE_ENTRY
|
||||
mov edi, dword [edi + ecx + NVM_QUEUE_ENTRY.sq_ptr]
|
||||
mov esi, [cmd]
|
||||
mov ecx, dword [esi + SQ_ENTRY.cdw0]
|
||||
shr ecx, 16 ; Get CID
|
||||
imul ecx, sizeof.SQ_ENTRY
|
||||
mov edi, dword [edi + pcidev.queue_entries]
|
||||
mov edi, dword [edi + NVM_QUEUE_ENTRY.sq_ptr]
|
||||
lea edi, [edi + ecx]
|
||||
stdcall memcpy, edi, esi, sizeof.SQ_ENTRY
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user