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

fix errors

This commit is contained in:
ramenu 2024-03-31 16:13:17 -04:00
parent ab0e73b2b5
commit 43a3db6f1e
2 changed files with 159 additions and 160 deletions

View File

@ -63,42 +63,41 @@ proc service_proc stdcall, ioctl:dword
ret ret
endp endp
; todo complete
proc ns_management_supported stdcall
mov eax, [p_ident + id_controller.oacs]
test eax, OACS_NSMAN_SUPPORTED
ret
endp
proc memset stdcall, p_data:dword, val:byte, sz:dword proc memset stdcall, p_data:dword, val:byte, sz:dword
mov ah, byte [val] mov bh, byte [val]
xor ebx, ebx xor eax, eax
@@: @@:
mov byte [p_data + ebx], ah mov byte [p_data + eax], bh
inc ebx inc eax
cmp ebx, dword [sz] cmp eax, dword [sz]
jne @b jne @b
ret ret
endp endp
; Submit a Command in the Admin Submission Queue ; Submit a Command in the Admin Submission Queue
proc submit_asq stdcall, p_sq:dword proc submit_asq stdcall, p_sq:dword
mov eax, dword [p_sq] mov ebx, dword [bar0]
add ebx, NVME_REG_ASQ
xor eax, eax
ret
endp endp
proc nvme_identify stdcall, nsid:dword, dptr:dword, cns:byte proc nvme_identify stdcall, nsid:dword, dptr:dword, cns:byte
sub esp, sizeof.sq_entry sub esp, sizeof.SQ_ENTRY
stdcall memset, esp, 0, sizeof.cq_entry stdcall memset, esp, 0, sizeof.SQ_ENTRY
mov eax, dword [nsid] mov eax, dword [nsid]
mov [esp + sq_entry.nsid], eax mov [esp + SQ_ENTRY.nsid], eax
mov eax, dword [dptr] mov eax, dword [dptr]
mov [esp + sq_entry.dptr], eax mov dword [esp + SQ_ENTRY.dptr], eax
; TODO: setting CID to 1 for now but later on keep a list of unique list of identifiers ; TODO: setting CID to 1 for now but later on keep a list of unique list of identifiers
mov dword [esp + sq_entry.cdw0], ADM_CMD_IDENTIFY or (1 shl 16) mov dword [esp + SQ_ENTRY.cdw0], ADM_CMD_IDENTIFY or (1 shl 16)
mov ah, byte [cns] mov ah, byte [cns]
mov byte [esp + sq_entry.cdw10], ah mov byte [esp + SQ_ENTRY.cdw10], ah
add esp, sizeof.sq_entry stdcall submit_asq, esp
add esp, sizeof.SQ_ENTRY
xor eax, eax
ret
endp endp
proc detect proc detect
@ -147,15 +146,16 @@ proc detect
invoke PciRead32, [pcidev_bus], [pcidev_devfn], PCI_header00.base_addr_0 invoke PciRead32, [pcidev_bus], [pcidev_devfn], PCI_header00.base_addr_0
mov [bar0], eax mov [bar0], eax
invoke Kmalloc, sizeof.id_controller invoke Kmalloc, sizeof.NVME_IDENT_CONTROLLER
test eax, eax test eax, eax
jz .alloc_id_controller_fail jz .alloc_ident_controller_fail
DEBUGF DBG_INFO,"Successfully allocated %u bytes for 'id_controller'\n",sizeof.id_controller DEBUGF DBG_INFO,"Successfully allocated %u bytes for 'NVME_IDENT_CONTROLLER'\n",sizeof.NVME_IDENT_CONTROLLER
mov [p_ident], eax mov [p_ident], eax
stdcall nvme_identify, 0, dword [p_ident], CNS_IDCS stdcall nvme_identify, 0, dword [p_ident], CNS_IDCS
mov ecx, dword [p_ident] mov ecx, dword [p_ident]
DEBUGF DBG_INFO,"Total NVMe SSD capacity: %ub\n",dword [ecx + id_controller.tnvmcap] mov edx, dword [ecx + NVME_IDENT_CONTROLLER.tnvmcap]
DEBUGF DBG_INFO,"Total NVMe SSD capacity: %ub\n", edx
; return successfully ; return successfully
call nvme_cleanup call nvme_cleanup
@ -165,8 +165,8 @@ proc detect
inc eax inc eax
ret ret
.alloc_id_controller_fail: .alloc_ident_controller_fail:
DEBUGF DBG_INFO,"ERROR: failed to allocate %u bytes for 'id_controller'\n", sizeof.id_controller DEBUGF DBG_INFO,"ERROR: failed to allocate %u bytes for 'NVME_IDENT_CONTROLLER'\n", sizeof.NVME_IDENT_CONTROLLER
pop eax pop eax
pop ebx pop ebx
xor eax, eax xor eax, eax

View File

@ -91,20 +91,20 @@ OACS_NSMAN_SUPPORTED = 1 shl 3
NSID_BROADCAST = 0xFFFFFFFF NSID_BROADCAST = 0xFFFFFFFF
; Submission Queue Entry (64 bytes) ; Submission Queue Entry (64 bytes)
struc sq_entry { struct SQ_ENTRY
.cdw0 dd ? cdw0 rd 1
.nsid dd ? nsid rd 1
.cdw2 dd ? cdw2 rd 1
.cdw3 dd ? cdw3 rd 1
.mptr dq ? mptr rq 1
.dptr dq ? dptr rq 1
.cdw10 dd ? cdw10 rd 1
.cdw11 dd ? cdw11 rd 1
.cdw12 dd ? cdw12 rd 1
.cdw13 dd ? cdw13 rd 1
.cdw14 dd ? cdw14 rd 1
.cdw15 dd ? cdw15 rd 1
} ends
struc nvme_dev { struc nvme_dev {
.pci_bus dd ? .pci_bus dd ?
@ -114,133 +114,132 @@ struc nvme_dev {
.model db 40 .model db 40
} }
struct id_controller struct NVME_IDENT_CONTROLLER
pci_vid dw ? pci_vid rw 1
pci_ssvid dw ? pci_ssvid rw 1
serial db 20 serial rb 20
model db 40 model rb 40
firm_rev dq ? firm_rev rq 1
rab db ? rab rb 1
ieee db 3 ieee rb 3
cmic db ? cmic rb 1
mdts db ? mdts rb 1
ctrlid dw ? ctrlid rw 1
ver db 3 ver rb 3
rtd3r dd ? rtd3r rd 1
rtd3e dd ? rtd3e rd 1
ctrlatt dd ? ctrlatt rd 1
rrls dw ? rrls rw 1
reserved db 9 reserved rb 9
ctrltyp db ? ctrltyp rb 1
fguid dq 2 fguid rq 2
crdt1 dw ? crdt1 rw 1
ctdt2 dw ? ctdt2 rw 1
crdt3 dw ? crdt3 rw 1
rb 106 ; reserved rb 106 ; reserved
rb 13 ; reserved (NVMMI) rb 13 ; reserved (NVMMI)
nvmsr db ? nvmsr rb 1
vmci db ? vmci rb 1
mec db ? mec rb 1
oacs dw ? oacs rw 1
acl db ? acl rb 1
aerl db ? aerl rb 1
frmw db ? frmw rb 1
lpa db ? lpa rb 1
elpe db ? elpe rb 1
npss db ? npss rb 1
avscc db ? avscc rb 1
apsta db ? apsta rb 1
wctemp dw ? wctemp rw 1
cctemp dw ? cctemp rw 1
mtfa dw ? mtfa rw 1
hmpre dd ? hmpre rd 1
hmmin dd ? hmmin rd 1
tnvmcap dq 2 tnvmcap rq 2
unvmcap dq 2 unvmcap rq 2
rpmbs dd ? rpmbs rd 1
edstt dw ? edstt rw 1
dsto db ? dsto rb 1
fwug db ? fwug rb 1
kas dw ? kas rw 1
hctma dw ? hctma rw 1
mntmt dw ? mntmt rw 1
mxtmt dw ? mxtmt rw 1
sanicap dd ? sanicap rd 1
hmminds dd ? hmminds rd 1
hmmaxd dw ? hmmaxd rw 1
nsetidmax dw ? nsetidmax rw 1
endgidmax dw ? endgidmax rw 1
anatt db ? anatt rb 1
anacap db ? anacap rb 1
anagrpmax dd ? anagrpmax rd 1
nanagrpid dd ? nanagrpid rd 1
pels dd ? pels rd 1
domid dw ? domid rw 1
rb 10 ; reserved rb 10 ; reserved
megcap dq 2 megcap rq 2
rb 128 ; reserved rb 128 ; reserved
sqes db ? sqes rb 1
cqes db ? cqes rb 1
maxcmd dw ? maxcmd rw 1
nn dd ? nn rd 1
oncs dw ? oncs rw 1
fuses dw ? fuses rw 1
fna db ? fna rb 1
vwc db ? vwc rb 1
awun dw ? awun rw 1
awupf dw ? awupf rw 1
icsvscc db ? icsvscc rb 1
nwpc db ? nwpc rb 1
acwu dw ? acwu rw 1
ocfs dw ? ocfs rw 1
sgls dd ? sgls rd 1
mnan dd ? mnan rd 1
maxdna dq 2 maxdna rq 2
maxcna dd ? maxcna rd 1
rb 204 ; reserved rb 204 ; reserved
subnqn db 256 subnqn rb 256
rb 768 ; reserved rb 768 ; reserved
ioccsz dd ? ioccsz rd 1
iorcsz dd ? iorcsz rd 1
icdoff dw ? icdoff rw 1
fcatt db ? fcatt rb 1
msdbd db ? msdbd rb 1
ofcs dw ? ofcs rw 1
rb 242 ; reserved rb 242 ; reserved
psd0 db 32 psd0 rb 32
psd1 db 32 psd1 rb 32
psd2 db 32 psd2 rb 32
psd3 db 32 psd3 rb 32
psd4 db 32 psd4 rb 32
psd5 db 32 psd5 rb 32
psd6 db 32 psd6 rb 32
psd7 db 32 psd7 rb 32
psd8 db 32 psd8 rb 32
psd9 db 32 psd9 rb 32
psd10 db 32 psd10 rb 32
psd11 db 32 psd11 rb 32
psd12 db 32 psd12 rb 32
psd13 db 32 psd13 rb 32
psd14 db 32 psd14 rb 32
psd15 db 32 psd15 rb 32
psd16 db 32 psd16 rb 32
psd17 db 32 psd17 rb 32
psd18 db 32 psd18 rb 32
psd19 db 32 psd19 rb 32
psd20 db 32 psd20 rb 32
psd21 db 32 psd21 rb 32
psd22 db 32 psd22 rb 32
psd23 db 32 psd23 rb 32
psd24 db 32 psd24 rb 32
psd25 db 32 psd25 rb 32
psd26 db 32 psd26 rb 32
psd27 db 32 psd27 rb 32
psd28 db 32 psd28 rb 32
psd29 db 32 psd29 rb 32
psd30 db 32 psd30 rb 32
psd31 db 32 psd31 rb 32
venspec db 1024 venspec rb 1024
ends ends