FrostWing
A lightweight raw-control operating system.
Loading...
Searching...
No Matches
nvme.h
1#ifndef NVME_H
2#define NVME_H
3
4#include <basics.h>
5
6#define NVME_MAX_CONTROLLERS 8
7#define NVME_MAX_NAMESPACES 16
8#define NVME_ADMIN_QUEUE_DEPTH 16
9#define NVME_IO_QUEUE_DEPTH 64
10
11typedef volatile struct {
12 uint64_t cap;
13 uint32_t vs;
14 uint32_t intms;
15 uint32_t intmc;
16 uint32_t cc;
17 uint32_t rsv0;
18 uint32_t csts;
19 uint32_t nssr;
20 uint32_t aqa;
21 uint64_t asq;
22 uint64_t acq;
24
25typedef struct __attribute__((packed)) {
26 uint8_t opcode;
27 uint8_t flags;
28 uint16_t cid;
29 uint32_t nsid;
30 uint64_t rsv0;
31 uint64_t mptr;
32 uint64_t prp1;
33 uint64_t prp2;
34 uint32_t cdw10;
35 uint32_t cdw11;
36 uint32_t cdw12;
37 uint32_t cdw13;
38 uint32_t cdw14;
39 uint32_t cdw15;
40} nvme_command_t;
41
42typedef struct __attribute__((packed)) {
43 uint32_t dw0;
44 uint32_t rsv0;
45 uint16_t sq_head;
46 uint16_t sq_id;
47 uint16_t cid;
48 uint16_t status;
49} nvme_completion_t;
50
51typedef struct {
52 nvme_command_t* sq;
53 nvme_completion_t* cq;
54 uint16_t qid;
55 uint16_t depth;
56 uint16_t sq_tail;
57 uint16_t cq_head;
58 uint8_t phase;
60
61typedef struct {
62 nvme_regs_t* regs;
63 uint32_t doorbell_stride;
64 uint32_t controller_id;
65 uint32_t nn;
66 nvme_queue_t adminq;
67 nvme_queue_t ioq;
68 void* bounce_buffer;
69 int present;
71
72typedef struct {
73 int present;
74 int controller_index;
75 uint32_t nsid;
76 uint64_t total_sectors;
77 uint32_t lba_size;
78 int logical_device;
79 char name[32];
81
82extern nvme_controller_t nvme_controllers[NVME_MAX_CONTROLLERS];
83extern nvme_namespace_t nvme_namespaces[NVME_MAX_NAMESPACES];
84extern int nvme_namespace_count;
85
86void probe_nvme(uint8_t bus, uint8_t slot, uint8_t function);
87int nvme_read_sector(int namespace_index, uint64_t lba, void* buffer, uint32_t count);
88int nvme_write_sector(int namespace_index, uint64_t lba, void* buffer, uint32_t count);
89
90#endif
struct acpi_gas __attribute__
Physical Region Descriptor Table (PRDT) entry.
Definition ahci.h:71
This is a basic header files with FrostWing specific short forms and basically a good for life header...