XenevaOS
Loading...
Searching...
No Matches
nvme.h
Go to the documentation of this file.
1
30#ifndef __NVME_H__
31#define __NVME_H__
32
33#include <stdint.h>
34#include <list.h>
35#include <Fs/vfs.h>
36#include <aurora.h>
37
38#pragma pack(push,1)
39typedef struct _nvme_identify_cmd_ {
40 enum {
44 };
45#pragma pack(push,1)
46 struct {
50 };
51#pragma pack(pop)
54#pragma pack(pop)
55
56#pragma pack(push,1)
58#pragma pack(push,1)
59 struct {
62 };
63#pragma pack(pop)
64
65#pragma pack(push,1)
66 struct {
71 };
72#pragma pack(pop)
74#pragma pack(pop)
75
76#pragma pack(push,1)
78#pragma pack(push,1)
79 struct {
82 };
83#pragma pack(pop)
84
85#pragma pack(push,1)
86 struct {
91 };
92#pragma pack(pop)
94#pragma pack(pop)
95
96#pragma pack(push,1)
100#pragma pack(pop)
101
102#pragma pack(push,1)
104 enum{
106 };
107#pragma pack(push,1)
108 struct {
112 };
113#pragma pack(pop)
118#pragma pack(pop)
119
120#pragma pack(push,1)
132#pragma pack(pop)
133
134#pragma pack(push,1)
149#pragma pack(pop)
150
151
152#pragma pack(push,1)
181#pragma pack(pop)
182
183#pragma pack(push,1)
184typedef struct _nvme_completion_ {
187#pragma pack(push,1)
188 struct {
191 };
192#pragma pack(pop)
193
194#pragma pack(push,1)
195 struct {
199 };
200#pragma pack(pop)
202#pragma pack(pop)
203
213
214
259//static_assert(sizeof(NVMeControllerIdentity) == 4096,"NVMe packing error !");
260
263#pragma pack(push,1)
264 struct {
269 };
270#pragma pack(pop)
271};
272
273#pragma pack(push,1)
286#pragma pack(pop)
287
310
326
327#define NVME_REGISTER_CAP 0x00
328#define NVME_REGISTER_VS 0x08 //version
329#define NVME_REGISTER_INTMS 0x0C //interrupt mask set
330#define NVME_REGISTER_INTMC 0x10 //interrupt mask clear
331#define NVME_REGISTER_CC 0x14 //controller configuration
332#define NVME_REGISTER_CSTS 0x1C //controller status
333#define NVME_REGISTER_AQA 0x24 //Admin queue attributes
334#define NVME_REGISTER_ASQ 0x28 //Admin submission queue
335#define NVME_REGISTER_ACQ 0x30 //Admin completion queue
336
337#define NVME_CC_DISABLE 0
338#define NVME_CC_EN 0x1
339#define NVME_CC_EN_MASK 0x1
340#define NVME_CC_CSNVME 0x0
341#define NVME_CC_CSS_MASK 0x70
342#define NVME_CC_MPS_MASK 0x780
343#define NVME_CC_MPS_SHIFT 7
344#define NVME_CC_AMS_ROUNDROBIN 0
345#define NVME_CC_AMS_WIGHTED (1<<11)
346#define NVME_CC_AMS_MASK (0x7 << 11)
347
348#define NVME_CAP_MPS_MASK 0xfU
349#define NVME_CAP_MPSMAX(x) ((x >> 52) & NVME_CAP_MPS_MASK)
350#define NVME_CAP_MPSMIN(x) ((x >> 48) & NVME_CAP_MPS_MASK)
351
352#define NVME_CAP_MQES_MASK 0xffffU
353#define NVME_CAP_MQES(x) ((x) & NVME_CAP_MQES_MASK)
354
355#define NVME_CFG_MPS_MASK 0xfUL
356#define NVME_CFG_MPS(x) (((x) & NVME_CFG_MPS_MASK) << 7)
357#define NVME_CFG_CSS_MASK 0x7
358#define NVME_CFG_CSS(x) (((x) & NVME_CFG_CSS_MASK) << 4)
359#define NVME_CFG_ENABLE (1<<0)
360
361#define NVME_CONFIG_COMMAND_SET_NVM 0x0
362#define NVME_CONFIG_COMMAND_ALL_SUPPORTED_IO 0x6
363#define NVME_CONFIG_COMMAND_SET_ADMIN_ONLY 0x7
364
365#define NVME_CFG_DEFAULT_IOCQES (4<<20)
366#define NVME_CFG_DEFAULT_IOSQES (6<<16)
367
368#define NVME_AQA_AQS_MASK 0xfffU
369#define NVME_AQA_ACQS(x) (((x) & NVME_AQA_AQS_MASK) << 16)
370#define NVME_AQA_ASQS(x) (((x) & NVME_AQA_AQS_MASK) << 0)
371
372#define NVME_CAP_DSTRD_MASK 0xfU
373#define NVME_CAP_DSTRD(x) (((x) >> 32) & NVME_CAP_DSTRD_MASK)
374
375#define NVME_NSSR_RESET_VALUE 0x4e564d65
376
377
378/* NVMeGetQueue -- returns a queue specified by queue id
379* @param queueid -- NVMe Queue ID number
380*/
381extern NVMeQueue* NVMeGetQueue(uint16_t queueid);
382/*
383* NVMeSubmitCommand -- submits commands and waits for completion data
384* @param queue -- NVMe Queue data structure
385* @param cmd -- NVMe command
386* @param comp -- Completion data structure
387*/
389
390
391#endif
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
signed char int8_t
Definition acefiex.h:158
NVMeQueue * NVMeGetQueue(uint16_t queueid)
Definition nvme.cpp:225
struct _nvme_cmd_ NVMeCommand
struct _nvme_create_io_sub_queue_ NVMeCreateIOSubmissionQueueCommand
struct _nvme_set_features_cmd_ NVMeSetFeatureCommand
struct _nvme_create_io_comp_queue_cmd_ NVMeCreateIOCompletionQueueCommand
struct _NVMeWriteCommand_ NVMeWriteCommand
struct _NVMeReadCommand_ NVMeReadCommand
volatile struct _controller_identity_ NVMeControllerIdentity
AdminCommands
Definition nvme.h:204
@ AdminCmdDeleteIOSubmissionQueue
Definition nvme.h:205
@ AdminCmdCreateIOCompletionQueue
Definition nvme.h:209
@ AdminCmdSetFeatures
Definition nvme.h:211
@ AdminCmdDeleteIOCompletionQueue
Definition nvme.h:208
@ AdminCmdGetLogPage
Definition nvme.h:207
@ AdminCmdIdentify
Definition nvme.h:210
@ AdminCmdCreateIOSubmissionQueue
Definition nvme.h:206
struct _nvme_completion_ NVMeCompletion
struct _nvme_identify_cmd_ NVMeIdentifyCommand
struct _nvme_dev_ NVMeDev
struct _nvme_delete_io_queue_cmd_ NVMeDeleteIOQueueCommand
void NVMeSubmitCommand(NVMeQueue *queue, NVMeCommand *cmd, NVMeCompletion *comp)
Definition nvme.cpp:246
struct _nvme_queue_ NVMeQueue
struct _namespace_id_ NamespaceIdentity
Definition nvme.h:121
uint32_t reserved
Definition nvme.h:126
uint32_t limitedRetry
Definition nvme.h:129
uint64_t startLBA
Definition nvme.h:122
uint32_t forceUnitAccess
Definition nvme.h:128
uint32_t prInfo
Definition nvme.h:127
uint32_t blockNum
Definition nvme.h:125
Definition nvme.h:135
uint64_t startLBA
Definition nvme.h:136
uint32_t blockNum
Definition nvme.h:139
uint32_t prInfo
Definition nvme.h:143
uint32_t reserved2
Definition nvme.h:140
uint32_t forceUnitAccess
Definition nvme.h:144
uint32_t limitedRetry
Definition nvme.h:145
uint32_t directiveType
Definition nvme.h:141
uint32_t reserved
Definition nvme.h:142
Definition vfs.h:89
Definition nvme.h:215
uint32_t hostMemoryBufferPreferredSize
Definition nvme.h:248
uint8_t unused[232]
Definition nvme.h:250
uint32_t controllerAttributes
Definition nvme.h:230
uint32_t rtd3EntryLatency
Definition nvme.h:228
uint8_t recommendedArbitrationBurst
Definition nvme.h:221
uint8_t ieee[3]
Definition nvme.h:222
uint16_t controllerID
Definition nvme.h:225
uint16_t rrls
Definition nvme.h:231
uint32_t rtd3ResumeLatency
Definition nvme.h:227
uint32_t numNamespaces
Definition nvme.h:254
uint8_t unused3[3072]
Definition nvme.h:257
uint16_t ccTemp
Definition nvme.h:246
uint32_t version
Definition nvme.h:226
uint8_t reserved2[122]
Definition nvme.h:236
uint8_t numberOfPowerStates
Definition nvme.h:243
uint16_t oacs
Definition nvme.h:237
uint32_t oaes
Definition nvme.h:229
uint8_t firmwareUpdates
Definition nvme.h:240
uint8_t reserved[9]
Definition nvme.h:232
uint8_t cmic
Definition nvme.h:223
uint8_t unused2[248]
Definition nvme.h:255
uint8_t fGUID[16]
Definition nvme.h:234
uint8_t sqEntrySize
Definition nvme.h:251
uint8_t errorLogPageEntries
Definition nvme.h:242
int8_t name[256]
Definition nvme.h:256
uint8_t apsta
Definition nvme.h:244
uint16_t vendorID
Definition nvme.h:216
uint16_t mtfa
Definition nvme.h:247
uint32_t hostMemoryBufferMinimumSize
Definition nvme.h:249
uint8_t controllerType
Definition nvme.h:233
uint16_t subsystemVendorID
Definition nvme.h:217
uint8_t logPageAttributes
Definition nvme.h:241
uint8_t acl
Definition nvme.h:238
uint8_t aerl
Definition nvme.h:239
int8_t modelNumber[40]
Definition nvme.h:219
uint8_t maximumDataTransferSize
Definition nvme.h:224
uint16_t wcTemp
Definition nvme.h:245
uint8_t cqEntrySize
Definition nvme.h:252
int8_t firmwareRevision[8]
Definition nvme.h:220
int8_t serialNumber[20]
Definition nvme.h:218
uint16_t maxCmd
Definition nvme.h:253
uint16_t crdt[3]
Definition nvme.h:235
Definition list.h:46
Definition nvme.h:274
uint8_t fmtLBASize
Definition nvme.h:280
uint8_t nsFeat
Definition nvme.h:278
uint64_t nsCap
Definition nvme.h:276
uint8_t numLBAFormat
Definition nvme.h:279
uint64_t nsUse
Definition nvme.h:277
uint8_t vendor[3712]
Definition nvme.h:284
uint8_t reserved[192]
Definition nvme.h:283
uint8_t unused[101]
Definition nvme.h:281
NVMeLBAFormat lbaFormat[16]
Definition nvme.h:282
uint64_t namespaceSize
Definition nvme.h:275
Definition nvme.h:153
uint32_t nsid
Definition nvme.h:163
NVMeIdentifyCommand identify
Definition nvme.h:172
uint32_t reserved
Definition nvme.h:158
NVMeWriteCommand write
Definition nvme.h:178
NVMeCreateIOCompletionQueueCommand createIOCQ
Definition nvme.h:173
uint64_t resv
Definition nvme.h:164
NVMeReadCommand read
Definition nvme.h:177
uint32_t commandID
Definition nvme.h:160
uint64_t prp1
Definition nvme.h:166
uint64_t metadataPtr
Definition nvme.h:165
uint32_t fuse
Definition nvme.h:157
uint64_t prp2
Definition nvme.h:167
NVMeDeleteIOQueueCommand deleteIOQ
Definition nvme.h:175
NVMeCreateIOSubmissionQueueCommand createIOSQ
Definition nvme.h:174
uint32_t cmdDwords[6]
Definition nvme.h:170
uint32_t opcode
Definition nvme.h:156
uint32_t psdt
Definition nvme.h:159
NVMeSetFeatureCommand setFeatures
Definition nvme.h:176
Definition nvme.h:184
uint32_t sqID
Definition nvme.h:190
uint32_t status
Definition nvme.h:198
uint32_t reserved
Definition nvme.h:186
uint32_t phaseTag
Definition nvme.h:197
uint32_t dw0
Definition nvme.h:185
uint32_t commandID
Definition nvme.h:196
uint32_t sqHead
Definition nvme.h:189
uint32_t reserved
Definition nvme.h:69
uint32_t intVector
Definition nvme.h:70
uint32_t contiguous
Definition nvme.h:67
uint32_t queueSize
Definition nvme.h:61
uint32_t intEnable
Definition nvme.h:68
uint32_t queueID
Definition nvme.h:60
Definition nvme.h:77
uint32_t cqID
Definition nvme.h:90
uint32_t queueSize
Definition nvme.h:81
uint32_t contiguous
Definition nvme.h:87
uint32_t queueID
Definition nvme.h:80
uint32_t reserved
Definition nvme.h:89
uint32_t priority
Definition nvme.h:88
Definition nvme.h:97
uint32_t queueID
Definition nvme.h:98
Definition nvme.h:311
uint16_t queueAllocatedID
Definition nvme.h:324
uint32_t doorbellStride
Definition nvme.h:321
uint8_t majorVersion
Definition nvme.h:315
uint32_t minPageSize
Definition nvme.h:318
uint64_t mmiobase
Definition nvme.h:314
char * nvmedevpath
Definition nvme.h:312
AuVFSNode * devfs
Definition nvme.h:313
uint16_t numSQEAllocated
Definition nvme.h:323
uint32_t maxPageSize
Definition nvme.h:319
list_t * NVMeQueueList
Definition nvme.h:320
uint16_t numCQEAllocated
Definition nvme.h:322
uint8_t minorVersion
Definition nvme.h:316
uint16_t maxQueueEntries
Definition nvme.h:317
Definition nvme.h:39
uint32_t cns
Definition nvme.h:47
uint32_t reserved
Definition nvme.h:48
uint32_t cntID
Definition nvme.h:49
uint32_t nvmSetID
Definition nvme.h:52
@ CNSNamespaceList
Definition nvme.h:43
@ CNSNamespace
Definition nvme.h:41
@ CNSContoller
Definition nvme.h:42
Definition nvme.h:288
bool completion_cycle_state
Definition nvme.h:307
NVMeCommand * submissionQueue
Definition nvme.h:296
uint64_t completionMMIOBase
Definition nvme.h:290
uint16_t sq_count
Definition nvme.h:304
uint16_t nextCommandId
Definition nvme.h:308
uint32_t nvmeCQDoorbell
Definition nvme.h:298
uint16_t cq_size
Definition nvme.h:301
uint16_t cq_head
Definition nvme.h:306
uint64_t submissionMMIOBase
Definition nvme.h:291
uint16_t sq_tail
Definition nvme.h:305
uint16_t queueId
Definition nvme.h:289
NVMeCompletion * completionQueue
Definition nvme.h:295
uint64_t submissionPhysBase
Definition nvme.h:293
uint32_t nvmeSQDoorbell
Definition nvme.h:299
uint64_t completionPhysBase
Definition nvme.h:292
uint16_t cq_count
Definition nvme.h:303
uint16_t sq_size
Definition nvme.h:302
Definition nvme.h:103
@ FeatureIDNumberOfQueues
Definition nvme.h:105
uint32_t dw13
Definition nvme.h:116
uint32_t save
Definition nvme.h:111
uint32_t reserved
Definition nvme.h:110
uint32_t dw12
Definition nvme.h:115
uint32_t dw11
Definition nvme.h:114
uint32_t featureID
Definition nvme.h:109
Definition nvme.h:261
uint32_t dw
Definition nvme.h:262
uint32_t metadataSize
Definition nvme.h:265
uint32_t lbaDataSize
Definition nvme.h:266
uint32_t reserved
Definition nvme.h:268
uint32_t relativePerformance
Definition nvme.h:267
struct VirtioQueue * queue
Definition virtiokbd.c:44