XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Enumerations | Functions
nvme.h File Reference
#include <stdint.h>
#include <list.h>
#include <Fs/vfs.h>
#include <aurora.h>
Include dependency graph for nvme.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _nvme_identify_cmd_
 
struct  _nvme_create_io_comp_queue_cmd_
 
struct  _nvme_create_io_sub_queue_
 
struct  _nvme_delete_io_queue_cmd_
 
struct  _nvme_set_features_cmd_
 
struct  _NVMeReadCommand_
 
struct  _NVMeWriteCommand_
 
struct  _nvme_cmd_
 
struct  _nvme_completion_
 
struct  _controller_identity_
 
union  NVMeLBAFormat
 
struct  _namespace_id_
 
struct  _nvme_queue_
 
struct  _nvme_dev_
 

Macros

#define NVME_REGISTER_CAP   0x00
 
#define NVME_REGISTER_VS   0x08
 
#define NVME_REGISTER_INTMS   0x0C
 
#define NVME_REGISTER_INTMC   0x10
 
#define NVME_REGISTER_CC   0x14
 
#define NVME_REGISTER_CSTS   0x1C
 
#define NVME_REGISTER_AQA   0x24
 
#define NVME_REGISTER_ASQ   0x28
 
#define NVME_REGISTER_ACQ   0x30
 
#define NVME_CC_DISABLE   0
 
#define NVME_CC_EN   0x1
 
#define NVME_CC_EN_MASK   0x1
 
#define NVME_CC_CSNVME   0x0
 
#define NVME_CC_CSS_MASK   0x70
 
#define NVME_CC_MPS_MASK   0x780
 
#define NVME_CC_MPS_SHIFT   7
 
#define NVME_CC_AMS_ROUNDROBIN   0
 
#define NVME_CC_AMS_WIGHTED   (1<<11)
 
#define NVME_CC_AMS_MASK   (0x7 << 11)
 
#define NVME_CAP_MPS_MASK   0xfU
 
#define NVME_CAP_MPSMAX(x)   ((x >> 52) & NVME_CAP_MPS_MASK)
 
#define NVME_CAP_MPSMIN(x)   ((x >> 48) & NVME_CAP_MPS_MASK)
 
#define NVME_CAP_MQES_MASK   0xffffU
 
#define NVME_CAP_MQES(x)   ((x) & NVME_CAP_MQES_MASK)
 
#define NVME_CFG_MPS_MASK   0xfUL
 
#define NVME_CFG_MPS(x)   (((x) & NVME_CFG_MPS_MASK) << 7)
 
#define NVME_CFG_CSS_MASK   0x7
 
#define NVME_CFG_CSS(x)   (((x) & NVME_CFG_CSS_MASK) << 4)
 
#define NVME_CFG_ENABLE   (1<<0)
 
#define NVME_CONFIG_COMMAND_SET_NVM   0x0
 
#define NVME_CONFIG_COMMAND_ALL_SUPPORTED_IO   0x6
 
#define NVME_CONFIG_COMMAND_SET_ADMIN_ONLY   0x7
 
#define NVME_CFG_DEFAULT_IOCQES   (4<<20)
 
#define NVME_CFG_DEFAULT_IOSQES   (6<<16)
 
#define NVME_AQA_AQS_MASK   0xfffU
 
#define NVME_AQA_ACQS(x)   (((x) & NVME_AQA_AQS_MASK) << 16)
 
#define NVME_AQA_ASQS(x)   (((x) & NVME_AQA_AQS_MASK) << 0)
 
#define NVME_CAP_DSTRD_MASK   0xfU
 
#define NVME_CAP_DSTRD(x)   (((x) >> 32) & NVME_CAP_DSTRD_MASK)
 
#define NVME_NSSR_RESET_VALUE   0x4e564d65
 

Typedefs

typedef struct _nvme_identify_cmd_ NVMeIdentifyCommand
 
typedef struct _nvme_create_io_comp_queue_cmd_ NVMeCreateIOCompletionQueueCommand
 
typedef struct _nvme_create_io_sub_queue_ NVMeCreateIOSubmissionQueueCommand
 
typedef struct _nvme_delete_io_queue_cmd_ NVMeDeleteIOQueueCommand
 
typedef struct _nvme_set_features_cmd_ NVMeSetFeatureCommand
 
typedef struct _NVMeReadCommand_ NVMeReadCommand
 
typedef struct _NVMeWriteCommand_ NVMeWriteCommand
 
typedef struct _nvme_cmd_ NVMeCommand
 
typedef struct _nvme_completion_ NVMeCompletion
 
typedef volatile struct _controller_identity_ NVMeControllerIdentity
 
typedef struct _namespace_id_ NamespaceIdentity
 
typedef struct _nvme_queue_ NVMeQueue
 
typedef struct _nvme_dev_ NVMeDev
 

Enumerations

enum  AdminCommands {
  AdminCmdDeleteIOSubmissionQueue = 0x0 , AdminCmdCreateIOSubmissionQueue = 0x1 , AdminCmdGetLogPage = 0x2 , AdminCmdDeleteIOCompletionQueue = 0x4 ,
  AdminCmdCreateIOCompletionQueue = 0x5 , AdminCmdIdentify = 0x6 , AdminCmdSetFeatures = 0x9
}
 

Functions

NVMeQueueNVMeGetQueue (uint16_t queueid)
 
void NVMeSubmitCommand (NVMeQueue *queue, NVMeCommand *cmd, NVMeCompletion *comp)
 

Macro Definition Documentation

◆ NVME_AQA_ACQS

#define NVME_AQA_ACQS (   x)    (((x) & NVME_AQA_AQS_MASK) << 16)

◆ NVME_AQA_AQS_MASK

#define NVME_AQA_AQS_MASK   0xfffU

◆ NVME_AQA_ASQS

#define NVME_AQA_ASQS (   x)    (((x) & NVME_AQA_AQS_MASK) << 0)

◆ NVME_CAP_DSTRD

#define NVME_CAP_DSTRD (   x)    (((x) >> 32) & NVME_CAP_DSTRD_MASK)

◆ NVME_CAP_DSTRD_MASK

#define NVME_CAP_DSTRD_MASK   0xfU

◆ NVME_CAP_MPS_MASK

#define NVME_CAP_MPS_MASK   0xfU

◆ NVME_CAP_MPSMAX

#define NVME_CAP_MPSMAX (   x)    ((x >> 52) & NVME_CAP_MPS_MASK)

◆ NVME_CAP_MPSMIN

#define NVME_CAP_MPSMIN (   x)    ((x >> 48) & NVME_CAP_MPS_MASK)

◆ NVME_CAP_MQES

#define NVME_CAP_MQES (   x)    ((x) & NVME_CAP_MQES_MASK)

◆ NVME_CAP_MQES_MASK

#define NVME_CAP_MQES_MASK   0xffffU

◆ NVME_CC_AMS_MASK

#define NVME_CC_AMS_MASK   (0x7 << 11)

◆ NVME_CC_AMS_ROUNDROBIN

#define NVME_CC_AMS_ROUNDROBIN   0

◆ NVME_CC_AMS_WIGHTED

#define NVME_CC_AMS_WIGHTED   (1<<11)

◆ NVME_CC_CSNVME

#define NVME_CC_CSNVME   0x0

◆ NVME_CC_CSS_MASK

#define NVME_CC_CSS_MASK   0x70

◆ NVME_CC_DISABLE

#define NVME_CC_DISABLE   0

◆ NVME_CC_EN

#define NVME_CC_EN   0x1

◆ NVME_CC_EN_MASK

#define NVME_CC_EN_MASK   0x1

◆ NVME_CC_MPS_MASK

#define NVME_CC_MPS_MASK   0x780

◆ NVME_CC_MPS_SHIFT

#define NVME_CC_MPS_SHIFT   7

◆ NVME_CFG_CSS

#define NVME_CFG_CSS (   x)    (((x) & NVME_CFG_CSS_MASK) << 4)

◆ NVME_CFG_CSS_MASK

#define NVME_CFG_CSS_MASK   0x7

◆ NVME_CFG_DEFAULT_IOCQES

#define NVME_CFG_DEFAULT_IOCQES   (4<<20)

◆ NVME_CFG_DEFAULT_IOSQES

#define NVME_CFG_DEFAULT_IOSQES   (6<<16)

◆ NVME_CFG_ENABLE

#define NVME_CFG_ENABLE   (1<<0)

◆ NVME_CFG_MPS

#define NVME_CFG_MPS (   x)    (((x) & NVME_CFG_MPS_MASK) << 7)

◆ NVME_CFG_MPS_MASK

#define NVME_CFG_MPS_MASK   0xfUL

◆ NVME_CONFIG_COMMAND_ALL_SUPPORTED_IO

#define NVME_CONFIG_COMMAND_ALL_SUPPORTED_IO   0x6

◆ NVME_CONFIG_COMMAND_SET_ADMIN_ONLY

#define NVME_CONFIG_COMMAND_SET_ADMIN_ONLY   0x7

◆ NVME_CONFIG_COMMAND_SET_NVM

#define NVME_CONFIG_COMMAND_SET_NVM   0x0

◆ NVME_NSSR_RESET_VALUE

#define NVME_NSSR_RESET_VALUE   0x4e564d65

◆ NVME_REGISTER_ACQ

#define NVME_REGISTER_ACQ   0x30

◆ NVME_REGISTER_AQA

#define NVME_REGISTER_AQA   0x24

◆ NVME_REGISTER_ASQ

#define NVME_REGISTER_ASQ   0x28

◆ NVME_REGISTER_CAP

#define NVME_REGISTER_CAP   0x00

◆ NVME_REGISTER_CC

#define NVME_REGISTER_CC   0x14

◆ NVME_REGISTER_CSTS

#define NVME_REGISTER_CSTS   0x1C

◆ NVME_REGISTER_INTMC

#define NVME_REGISTER_INTMC   0x10

◆ NVME_REGISTER_INTMS

#define NVME_REGISTER_INTMS   0x0C

◆ NVME_REGISTER_VS

#define NVME_REGISTER_VS   0x08

Typedef Documentation

◆ NamespaceIdentity

◆ NVMeCommand

typedef struct _nvme_cmd_ NVMeCommand

◆ NVMeCompletion

◆ NVMeControllerIdentity

◆ NVMeCreateIOCompletionQueueCommand

◆ NVMeCreateIOSubmissionQueueCommand

◆ NVMeDeleteIOQueueCommand

◆ NVMeDev

typedef struct _nvme_dev_ NVMeDev

◆ NVMeIdentifyCommand

BSD 2-Clause License

Copyright (c) 2022-2024, Manas Kamal Choudhury All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

◆ NVMeQueue

typedef struct _nvme_queue_ NVMeQueue

◆ NVMeReadCommand

◆ NVMeSetFeatureCommand

◆ NVMeWriteCommand

Enumeration Type Documentation

◆ AdminCommands

Enumerator
AdminCmdDeleteIOSubmissionQueue 
AdminCmdCreateIOSubmissionQueue 
AdminCmdGetLogPage 
AdminCmdDeleteIOCompletionQueue 
AdminCmdCreateIOCompletionQueue 
AdminCmdIdentify 
AdminCmdSetFeatures 

Function Documentation

◆ NVMeGetQueue()

NVMeQueue * NVMeGetQueue ( uint16_t  queueid)
extern

◆ NVMeSubmitCommand()

void NVMeSubmitCommand ( NVMeQueue queue,
NVMeCommand cmd,
NVMeCompletion comp 
)
extern