diff --git a/drivers/nvme/lib.asm b/drivers/nvme/lib.asm index 2eb60e7..ea57cc5 100644 --- a/drivers/nvme/lib.asm +++ b/drivers/nvme/lib.asm @@ -8,13 +8,13 @@ ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -proc memset stdcall, dest:dword, val:byte, sz:dword +proc memsetdz stdcall, dest:dword, sz:dword push edi mov edi, [dest] - mov al, [val] mov ecx, [sz] - rep stosb + xor eax, eax + rep stosd pop edi ret diff --git a/drivers/nvme/nvme.asm b/drivers/nvme/nvme.asm index 2f8f61b..4691c27 100644 --- a/drivers/nvme/nvme.asm +++ b/drivers/nvme/nvme.asm @@ -195,7 +195,7 @@ proc nvme_identify stdcall, pci:dword, nsid:dword, dptr:dword, cns:byte end if - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 mov eax, [nsid] mov dword [esp + SQ_ENTRY.nsid], eax @@ -307,7 +307,7 @@ endp proc create_io_completion_queue stdcall, pci:dword, prp1:dword, qid:dword, ien:byte sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_CRE_IO_COMPLETION_QUEUE mov dword [esp + SQ_ENTRY.cdw0], eax mov eax, [prp1] @@ -329,7 +329,7 @@ endp proc create_io_submission_queue stdcall, pci:dword, prp1:dword, qid:dword, cqid:word sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_CRE_IO_SUBMISSION_QUEUE mov dword [esp + SQ_ENTRY.cdw0], eax mov eax, [prp1] @@ -352,7 +352,7 @@ endp proc abort stdcall, pci:dword, cid:word, sqid:word sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_ABORT mov dword [esp + SQ_ENTRY.cdw0], eax movzx eax, [cid] @@ -370,7 +370,7 @@ endp proc set_features stdcall, pci:dword, dptr:dword, fid:byte, cdw11:dword sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_SET_FEATURES mov dword [esp + SQ_ENTRY.cdw0], eax mov eax, [dptr] @@ -390,7 +390,7 @@ endp proc delete_io_completion_queue stdcall, pci:dword, qid:word sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_DEL_IO_COMPLETION_QUEUE mov dword [esp + SQ_ENTRY.cdw0], eax mov ax, [qid] @@ -405,7 +405,7 @@ endp proc get_features stdcall, pci:dword, dptr:dword, sel:byte, fid:byte sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_GET_FEATURES mov dword [esp + SQ_ENTRY.cdw0], eax movzx eax, [sel] @@ -426,7 +426,7 @@ endp proc delete_io_submission_queue stdcall, pci:dword, qid:word sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_DEL_IO_SUBMISSION_QUEUE mov dword [esp + SQ_ENTRY.cdw0], eax mov ax, [qid] @@ -442,7 +442,7 @@ endp proc get_log_page stdcall, pci:dword, dptr:dword, lid:byte sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 stdcall set_cdw0, [pci], ADMIN_QUEUE, ADM_CMD_GET_LOG_PAGE mov dword [esp + SQ_ENTRY.cdw0], eax mov eax, [dptr] @@ -794,7 +794,7 @@ proc nvme_io_rw stdcall, pci:dword, qid:word, nsid:dword, prps:qword, slba_lo:dw ; ; TODO: Read AWUN/NAWUN sub esp, sizeof.SQ_ENTRY - stdcall memset, esp, 0, sizeof.SQ_ENTRY + stdcall memsetdz, esp, sizeof.SQ_ENTRY / 4 movzx ecx, [qid] stdcall set_cdw0, [pci], ecx, [opcode] mov dword [esp + SQ_ENTRY.cdw0], eax ; CDW0 @@ -998,7 +998,7 @@ proc nvme_init stdcall, pci:dword jz .exit_fail mov dword [esi + pcidev.queue_entries], eax mov edi, eax - stdcall memset, eax, 0, sizeof.NVM_QUEUE_ENTRY * (LAST_QUEUE_ID + 1) + stdcall memsetdz, eax, sizeof.NVM_QUEUE_ENTRY * (LAST_QUEUE_ID + 1) / 4 ; Allocate submission/completion queue pointers ; TODO: Make these queues physically contiguous @@ -1011,14 +1011,14 @@ proc nvme_init stdcall, pci:dword jz .exit_fail mov dword [edi + ecx + NVM_QUEUE_ENTRY.sq_ptr], eax push ecx - stdcall memset, eax, 0, sizeof.SQ_ENTRY * SQ_ENTRIES + stdcall memsetdz, eax, sizeof.CQ_ENTRY * CQ_ENTRIES / 4 invoke CreateRingBuffer, 0x1000, PG_SW pop ecx test eax, eax jz .exit_fail mov dword [edi + ecx + NVM_QUEUE_ENTRY.cq_ptr], eax push ecx - stdcall memset, eax, 0, sizeof.CQ_ENTRY * CQ_ENTRIES + stdcall memsetdz, eax, sizeof.CQ_ENTRY * CQ_ENTRIES / 4 pop ecx mov dword [edi + ecx + NVM_QUEUE_ENTRY.phase_tag], CQ_PHASE_TAG add ecx, sizeof.NVM_QUEUE_ENTRY @@ -1173,7 +1173,7 @@ proc nvme_init stdcall, pci:dword mov edi, eax ;stdcall memcpy, eax, test_string, 50 invoke GetPhysAddr - stdcall nvme_io_rw, [pci], 1, [esi + pcidev.nsid], eax, 0, 0, 1, NVM_CMD_READ + stdcall nvme_io_rw, [pci], 1, [esi + pcidev.nsid], eax, 0, 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