mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
nvme: detection
This commit is contained in:
@@ -66,7 +66,7 @@ void kmain(){
|
|||||||
consoledev_init();
|
consoledev_init();
|
||||||
|
|
||||||
pseudodevs_init();
|
pseudodevs_init();
|
||||||
|
|
||||||
#ifdef USE_E9
|
#ifdef USE_E9
|
||||||
|
|
||||||
e9out_init();
|
e9out_init();
|
||||||
@@ -76,6 +76,8 @@ void kmain(){
|
|||||||
fb_init();
|
fb_init();
|
||||||
|
|
||||||
pci_enumerate();
|
pci_enumerate();
|
||||||
|
|
||||||
|
nvme_init();
|
||||||
|
|
||||||
cpu_state_init();
|
cpu_state_init();
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
objects := $(patsubst %.c,%.o,$(wildcard *.c))
|
objects := $(patsubst %.c,%.o,$(wildcard *.c))
|
||||||
subdirs := mm sched syscalls pseudodevs
|
subdirs := mm sched syscalls pseudodevs block
|
||||||
OBJPATH=$(OBJDIR)/sys/
|
OBJPATH=$(OBJDIR)/sys/
|
||||||
export
|
export
|
||||||
|
|
||||||
|
|||||||
@@ -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)/$@
|
||||||
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user