nvme: detection

This commit is contained in:
Matheus
2022-11-22 13:38:02 -03:00
parent a7b5a775fa
commit 05439a4e3b
4 changed files with 56 additions and 2 deletions
+3 -1
View File
@@ -66,7 +66,7 @@ void kmain(){
consoledev_init();
pseudodevs_init();
#ifdef USE_E9
e9out_init();
@@ -76,6 +76,8 @@ void kmain(){
fb_init();
pci_enumerate();
nvme_init();
cpu_state_init();
+1 -1
View File
@@ -1,5 +1,5 @@
objects := $(patsubst %.c,%.o,$(wildcard *.c))
subdirs := mm sched syscalls pseudodevs
subdirs := mm sched syscalls pseudodevs block
OBJPATH=$(OBJDIR)/sys/
export
+12
View File
@@ -0,0 +1,12 @@
objects := $(patsubst %.c,%.o,$(wildcard *.c))
subdirs :=
OBJPATH=$(OBJDIR)
export
all: $(subdirs) $(objects)
for subdir in $(subdirs) ; do $(MAKE) -C $${subdir} ; done
%.o: %.c
$(CC) $(CFLAGS) -o $@ $<
mkdir -p $(OBJPATH)
cp $@ $(OBJPATH)/$@
+40
View File
@@ -0,0 +1,40 @@
#include <arch/pci.h>
#include <kernel/vmm.h>
typedef struct{
uint64_t cap;
uint32_t vs;
uint32_t intms;
uint32_t intmc;
uint32_t cc;
uint32_t csts;
uint32_t aqa;
uint32_t asq;
uint64_t acq;
} __attribute__((packed)) nvme_bar0;
int nvme_initctlr(pci_enumeration* pci){
void* bar0p = getbarmemaddr(pci->header, 0);
nvme_bar0* bar0 = vmm_alloc(2, ARCH_MMU_MAP_READ | ARCH_MMU_MAP_WRITE);
if(!bar0)
_panic("Out of memory", NULL);
if(!vmm_map(bar0p, bar0, 2, ARCH_MMU_MAP_READ | ARCH_MMU_MAP_WRITE))
_panic("Out of memory", NULL);
printf("NVMe: controller detected: %02x:%02x.%x v%u cap %lx\n", pci->bus, pci->device, pci->function, bar0->vs, bar0->cap);
}
void nvme_init(){
pci_enumeration* e = pci_getdevicecs(1, 8, 0);
if(!e)
return;
nvme_initctlr(e);
}