From e3241e35cc133961fae184753d3e6cf2b199d752 Mon Sep 17 00:00:00 2001 From: Abdur-Rahman Mansoor Date: Mon, 22 Jul 2024 14:19:54 -0400 Subject: [PATCH] perf(size): remove useless pow2 implementation --- drivers/nvme/nvme.asm | 41 ++++++++++------------------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/drivers/nvme/nvme.asm b/drivers/nvme/nvme.asm index f68f675..c61842f 100644 --- a/drivers/nvme/nvme.asm +++ b/drivers/nvme/nvme.asm @@ -690,12 +690,7 @@ proc nvme_readwrite stdcall, ns:dword, buf:dword, start_sector:qword, numsectors jz .dptr_fail DEBUGF DBG_INFO, "PRP1: %x, PRP2: %x\n", [ebx], [ebx + 4] - mov eax, dword [start_sector] - mov ecx, dword [esi + NSINFO.lbads] - xor edx, edx - div ecx - DEBUGF DBG_INFO, "sector start: %u\n", eax ; According to the NVMe specification, the NLB field in the I/O read and write ; commands is a 0-based value (i.e., 0 is equivalant to 1, 1 is equivalant to 2, ...) @@ -1110,11 +1105,13 @@ proc nvme_init stdcall, pci:dword mov dword [ebx + NSINFO.capacity + 4], eax ;DEBUGF DBG_INFO, "nvme%un%u: Namespace Size: %u + %u logical blocks\n", [esi + pcidev.num], [esi + pcidev.nsid], [edi + IDENTN.nsze], [edi + IDENTN.nsze + 4] ;DEBUGF DBG_INFO, "nvme%un%u: Namespace Capacity: %u + %u logical blocks\n", [esi + pcidev.num], [esi + pcidev.nsid], [edi + IDENTN.ncap], [edi + IDENTN.ncap + 4] - mov eax, dword [edi + IDENTN.lbaf0] - shr eax, 16 ; Get LBADS - and eax, 0xff - stdcall pow2, eax - ;DEBUGF DBG_INFO, "nvme%un%u: Namespace LBA Data Size: %u\n", [esi + pcidev.num], [esi + pcidev.nsid], eax + mov ecx, dword [edi + IDENTN.lbaf0] + shr ecx, 16 ; Get LBADS + and ecx, 0xff + dec ecx + mov eax, 2 + shl eax, cl + DEBUGF DBG_INFO, "nvme%un%u: Namespace LBA Data Size: %u\n", [esi + pcidev.num], [esi + pcidev.nsid], eax ; KolibriOS only supports a LBADS of 512, so if it's a higher value then we ; have to ignore this namespace @@ -1128,7 +1125,7 @@ proc nvme_init stdcall, pci:dword div ecx mov dword [ebx + NSINFO.pg_sectors], eax invoke KernelFree, edi - if 1 + if 0 invoke KernelAlloc, 0x6000 test eax, eax jz .exit_fail @@ -1138,6 +1135,7 @@ proc nvme_init stdcall, pci:dword jz .exit_fail mov edx, NVM_CMD_READ mov dword [eax], 25 + add edi, 0x5 stdcall nvme_readwrite, [esi + pcidev.nsinfo], edi, 0x1000, 0, eax DEBUGF DBG_INFO, "STRING: %s\n", edi add edi, 0x2000 @@ -1303,25 +1301,6 @@ proc sqytdbl_write stdcall, pci:dword, y:word, cmd:dword endp -; Calculates 2^x -proc pow2 stdcall, x:byte - - push ecx - mov cl, [x] - xor eax, eax - inc eax - test cl, cl - jnz @f - pop ecx - ret - -@@: - shl eax, cl - pop ecx - ret - -endp - proc nvme_cmd_wait stdcall, pci:dword, y:dword, cid:word push esi @@ -1488,7 +1467,7 @@ align 4 dd 0 ; no close function dd 0 ; no closemedia function dd nvme_query_media - dd 0 + dd nvme_read dd 0 ; no write function (for now) dd 0 ; no flush function dd 0 ; use default cache size