Home | History | Annotate | Line # | Download | only in nvmectl
nvme.h revision 1.1
      1  1.1  nonaka /*	$NetBSD: nvme.h,v 1.1 2016/06/04 16:29:35 nonaka Exp $	*/
      2  1.1  nonaka 
      3  1.1  nonaka /*-
      4  1.1  nonaka  * Copyright (C) 2012-2013 Intel Corporation
      5  1.1  nonaka  * All rights reserved.
      6  1.1  nonaka  *
      7  1.1  nonaka  * Redistribution and use in source and binary forms, with or without
      8  1.1  nonaka  * modification, are permitted provided that the following conditions
      9  1.1  nonaka  * are met:
     10  1.1  nonaka  * 1. Redistributions of source code must retain the above copyright
     11  1.1  nonaka  *    notice, this list of conditions and the following disclaimer.
     12  1.1  nonaka  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  nonaka  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  nonaka  *    documentation and/or other materials provided with the distribution.
     15  1.1  nonaka  *
     16  1.1  nonaka  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     17  1.1  nonaka  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  1.1  nonaka  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     19  1.1  nonaka  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     20  1.1  nonaka  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21  1.1  nonaka  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     22  1.1  nonaka  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23  1.1  nonaka  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     24  1.1  nonaka  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25  1.1  nonaka  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  1.1  nonaka  * SUCH DAMAGE.
     27  1.1  nonaka  *
     28  1.1  nonaka  * $FreeBSD: head/sys/dev/nvme/nvme.h 296617 2016-03-10 17:13:10Z mav $
     29  1.1  nonaka  */
     30  1.1  nonaka 
     31  1.1  nonaka #ifndef __NVME_H__
     32  1.1  nonaka #define __NVME_H__
     33  1.1  nonaka 
     34  1.1  nonaka #define	NVME_MAX_XFER_SIZE	MAXPHYS
     35  1.1  nonaka 
     36  1.1  nonaka /* Get/Set Features */
     37  1.1  nonaka #define	NVME_FEAT_ARBITRATION				0x01
     38  1.1  nonaka #define	NVME_FEAT_POWER_MANAGEMENT			0x02
     39  1.1  nonaka #define	NVME_FEAT_LBA_RANGE_TYPE			0x03
     40  1.1  nonaka #define	NVME_FEAT_TEMPERATURE_THRESHOLD			0x04
     41  1.1  nonaka #define	NVME_FEAT_ERROR_RECOVERY			0x05
     42  1.1  nonaka #define	NVME_FEAT_VOLATILE_WRITE_CACHE			0x06
     43  1.1  nonaka #define	NVME_FEAT_NUMBER_OF_QUEUES			0x07
     44  1.1  nonaka #define	NVME_FEAT_INTERRUPT_COALESCING			0x08
     45  1.1  nonaka #define	NVME_FEAT_INTERRUPT_VECTOR_CONFIGURATION	0x09
     46  1.1  nonaka #define	NVME_FEAT_WRITE_ATOMICITY_NORMAL		0x0a
     47  1.1  nonaka #define	NVME_FEAT_ASYNC_EVENT_CONFIGURATION		0x0b
     48  1.1  nonaka #define	NVME_FEAT_AUTONOMOUS_POWER_STATE_TRANSITION	0x0c
     49  1.1  nonaka #define	NVME_FEAT_HOST_MEMORY_BUFFER			0x0d
     50  1.1  nonaka /* NVM Command Set specific */
     51  1.1  nonaka #define	NVME_FEAT_SOFTWARE_PROGRESS_MARKER		0x80
     52  1.1  nonaka #define	NVME_FEAT_HOST_IDENTIFIER			0x81
     53  1.1  nonaka #define	NVME_FEAT_RESERVATION_NOTIFICATION_MASK		0x82
     54  1.1  nonaka #define	NVME_FEAT_RESERVATION_PERSISTANCE		0x83
     55  1.1  nonaka 
     56  1.1  nonaka /* Get Log Page */
     57  1.1  nonaka #define	NVME_LOG_ERROR					0x01
     58  1.1  nonaka #define	NVME_LOG_HEALTH_INFORMATION			0x02
     59  1.1  nonaka #define	NVME_LOG_FIRMWARE_SLOT				0x03
     60  1.1  nonaka #define	NVME_LOG_CHANGED_NAMESPACE_LIST			0x04
     61  1.1  nonaka #define	NVME_LOG_COMMAND_EFFECTS_LOG			0x05
     62  1.1  nonaka #define	NVME_LOG_RESERVATION_NOTIFICATION		0x80
     63  1.1  nonaka 
     64  1.1  nonaka /* Error Information Log (Log Identifier 01h) */
     65  1.1  nonaka struct nvme_error_information_entry {
     66  1.1  nonaka 	uint64_t		error_count;
     67  1.1  nonaka 	uint16_t		sqid;
     68  1.1  nonaka 	uint16_t		cid;
     69  1.1  nonaka 	uint16_t		status;
     70  1.1  nonaka 	uint16_t		error_location;
     71  1.1  nonaka 	uint64_t		lba;
     72  1.1  nonaka 	uint32_t		nsid;
     73  1.1  nonaka 	uint8_t			vendor_specific;
     74  1.1  nonaka 	uint8_t			_reserved1[3];
     75  1.1  nonaka 	uint64_t		command_specific;
     76  1.1  nonaka 	uint8_t			reserved[24];
     77  1.1  nonaka } __packed __aligned(4);
     78  1.1  nonaka 
     79  1.1  nonaka /* SMART / Health Information Log (Log Identifier 02h) */
     80  1.1  nonaka struct nvme_health_information_page {
     81  1.1  nonaka 	uint8_t			critical_warning;
     82  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_VOLATILE_MEMORY_BACKUP	__BIT(4)
     83  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_READ_ONLY			__BIT(3)
     84  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_DEVICE_RELIABLITY		__BIT(2)
     85  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_TEMPERTURE			__BIT(1)
     86  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_AVAIL_SPARE			__BIT(0)
     87  1.1  nonaka 	uint16_t		composite_temperature;
     88  1.1  nonaka 	uint8_t			available_spare;
     89  1.1  nonaka 	uint8_t			available_spare_threshold;
     90  1.1  nonaka 	uint8_t			percentage_used;
     91  1.1  nonaka 
     92  1.1  nonaka 	uint8_t			_reserved1[26];
     93  1.1  nonaka 
     94  1.1  nonaka 	uint64_t		data_units_read[2];
     95  1.1  nonaka 	uint64_t		data_units_written[2];
     96  1.1  nonaka 	uint64_t		host_read_commands[2];
     97  1.1  nonaka 	uint64_t		host_write_commands[2];
     98  1.1  nonaka 	uint64_t		controller_busy_time[2];
     99  1.1  nonaka 	uint64_t		power_cycles[2];
    100  1.1  nonaka 	uint64_t		power_on_hours[2];
    101  1.1  nonaka 	uint64_t		unsafe_shutdowns[2];
    102  1.1  nonaka 	uint64_t		media_errors[2];
    103  1.1  nonaka 	uint64_t		num_error_info_log_entries[2];
    104  1.1  nonaka 	uint32_t		warning_composite_temperature_time;
    105  1.1  nonaka 	uint32_t		critical_composite_temperature_time;
    106  1.1  nonaka 	uint16_t		temperature_sensor[8];
    107  1.1  nonaka 
    108  1.1  nonaka 	uint8_t			reserved[296];
    109  1.1  nonaka } __packed __aligned(4);
    110  1.1  nonaka 
    111  1.1  nonaka /* Firmware Commit */
    112  1.1  nonaka #define	NVME_COMMIT_ACTION_REPLACE_NO_ACTIVATE	0
    113  1.1  nonaka #define	NVME_COMMIT_ACTION_REPLACE_ACTIVATE	1
    114  1.1  nonaka #define	NVME_COMMIT_ACTION_ACTIVATE_RESET	2
    115  1.1  nonaka #define	NVME_COMMIT_ACTION_ACTIVATE_NO_RESET	3
    116  1.1  nonaka 
    117  1.1  nonaka /* Firmware Slot Information (Log Identifier 03h) */
    118  1.1  nonaka struct nvme_firmware_page {
    119  1.1  nonaka 	uint8_t			afi;
    120  1.1  nonaka #define	NVME_FW_PAGE_AFI_SLOT_RST	__BITS(4, 6)
    121  1.1  nonaka #define	NVME_FW_PAGE_AFI_SLOT		__BITS(0, 2)
    122  1.1  nonaka 	uint8_t			_reserved1[7];
    123  1.1  nonaka 
    124  1.1  nonaka 	uint64_t		revision[7];	/* revisions for 7 slots */
    125  1.1  nonaka 
    126  1.1  nonaka 	uint8_t			reserved[448];
    127  1.1  nonaka } __packed __aligned(4);
    128  1.1  nonaka 
    129  1.1  nonaka /* Commands Supported and Effects (Log Identifier 05h) */
    130  1.1  nonaka struct nvme_command_effeects_page {
    131  1.1  nonaka 	uint32_t		acs[256];
    132  1.1  nonaka #define	NVME_CE_PAGE_CS_CSE		__BITS(16, 18)
    133  1.1  nonaka #define	NVME_CE_PAGE_CS_CCC		__BIT(4)
    134  1.1  nonaka #define	NVME_CE_PAGE_CS_NIC		__BIT(3)
    135  1.1  nonaka #define	NVME_CE_PAGE_CS_NCC		__BIT(2)
    136  1.1  nonaka #define	NVME_CE_PAGE_CS_LBCC		__BIT(1)
    137  1.1  nonaka #define	NVME_CE_PAGE_CS_CSUPP		__BIT(0)
    138  1.1  nonaka 	uint32_t		iocs[256];
    139  1.1  nonaka 
    140  1.1  nonaka 	uint8_t			reserved[2048];
    141  1.1  nonaka } __packed __aligned(4);
    142  1.1  nonaka 
    143  1.1  nonaka #endif	/* __NVME_H__ */
    144