Home | History | Annotate | Line # | Download | only in nvmectl
      1  1.3  nonaka /*	$NetBSD: nvme.h,v 1.3 2018/04/18 10:11:44 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.2  nonaka  * $FreeBSD: head/sys/dev/nvme/nvme.h 314888 2017-03-07 23:02:59Z imp $
     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.2  nonaka /* Cap nvme to 1MB transfers driver explodes with larger sizes */
     35  1.2  nonaka #define NVME_MAX_XFER_SIZE		(MAXPHYS < (1<<20) ? MAXPHYS : (1<<20))
     36  1.1  nonaka 
     37  1.1  nonaka /* Get Log Page */
     38  1.1  nonaka #define	NVME_LOG_ERROR					0x01
     39  1.1  nonaka #define	NVME_LOG_HEALTH_INFORMATION			0x02
     40  1.1  nonaka #define	NVME_LOG_FIRMWARE_SLOT				0x03
     41  1.1  nonaka #define	NVME_LOG_CHANGED_NAMESPACE_LIST			0x04
     42  1.1  nonaka #define	NVME_LOG_COMMAND_EFFECTS_LOG			0x05
     43  1.1  nonaka #define	NVME_LOG_RESERVATION_NOTIFICATION		0x80
     44  1.2  nonaka /*
     45  1.2  nonaka  * The following are Intel Specific log pages, but they seem
     46  1.2  nonaka  * to be widely implemented.
     47  1.2  nonaka  */
     48  1.2  nonaka #define	INTEL_LOG_READ_LAT_LOG				0xc1
     49  1.2  nonaka #define	INTEL_LOG_WRITE_LAT_LOG				0xc2
     50  1.2  nonaka #define	INTEL_LOG_TEMP_STATS				0xc5
     51  1.2  nonaka #define	INTEL_LOG_ADD_SMART				0xca
     52  1.2  nonaka #define	INTEL_LOG_DRIVE_MKT_NAME			0xdd
     53  1.2  nonaka /*
     54  1.2  nonaka  * HGST log page, with lots ofs sub pages.
     55  1.2  nonaka  */
     56  1.2  nonaka #define	HGST_INFO_LOG					0xc1
     57  1.1  nonaka 
     58  1.1  nonaka /* Error Information Log (Log Identifier 01h) */
     59  1.1  nonaka struct nvme_error_information_entry {
     60  1.1  nonaka 	uint64_t		error_count;
     61  1.1  nonaka 	uint16_t		sqid;
     62  1.1  nonaka 	uint16_t		cid;
     63  1.1  nonaka 	uint16_t		status;
     64  1.1  nonaka 	uint16_t		error_location;
     65  1.1  nonaka 	uint64_t		lba;
     66  1.1  nonaka 	uint32_t		nsid;
     67  1.1  nonaka 	uint8_t			vendor_specific;
     68  1.1  nonaka 	uint8_t			_reserved1[3];
     69  1.1  nonaka 	uint64_t		command_specific;
     70  1.1  nonaka 	uint8_t			reserved[24];
     71  1.1  nonaka } __packed __aligned(4);
     72  1.1  nonaka 
     73  1.1  nonaka /* SMART / Health Information Log (Log Identifier 02h) */
     74  1.1  nonaka struct nvme_health_information_page {
     75  1.1  nonaka 	uint8_t			critical_warning;
     76  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_VOLATILE_MEMORY_BACKUP	__BIT(4)
     77  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_READ_ONLY			__BIT(3)
     78  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_DEVICE_RELIABLITY		__BIT(2)
     79  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_TEMPERTURE			__BIT(1)
     80  1.1  nonaka #define	NVME_HEALTH_PAGE_CW_AVAIL_SPARE			__BIT(0)
     81  1.1  nonaka 	uint16_t		composite_temperature;
     82  1.1  nonaka 	uint8_t			available_spare;
     83  1.1  nonaka 	uint8_t			available_spare_threshold;
     84  1.1  nonaka 	uint8_t			percentage_used;
     85  1.1  nonaka 
     86  1.1  nonaka 	uint8_t			_reserved1[26];
     87  1.1  nonaka 
     88  1.1  nonaka 	uint64_t		data_units_read[2];
     89  1.1  nonaka 	uint64_t		data_units_written[2];
     90  1.1  nonaka 	uint64_t		host_read_commands[2];
     91  1.1  nonaka 	uint64_t		host_write_commands[2];
     92  1.1  nonaka 	uint64_t		controller_busy_time[2];
     93  1.1  nonaka 	uint64_t		power_cycles[2];
     94  1.1  nonaka 	uint64_t		power_on_hours[2];
     95  1.1  nonaka 	uint64_t		unsafe_shutdowns[2];
     96  1.1  nonaka 	uint64_t		media_errors[2];
     97  1.1  nonaka 	uint64_t		num_error_info_log_entries[2];
     98  1.2  nonaka 	uint32_t		warning_temp_time;
     99  1.2  nonaka 	uint32_t		error_temp_time;
    100  1.2  nonaka 	uint16_t		temp_sensor[8];
    101  1.1  nonaka 
    102  1.1  nonaka 	uint8_t			reserved[296];
    103  1.1  nonaka } __packed __aligned(4);
    104  1.1  nonaka 
    105  1.1  nonaka /* Firmware Commit */
    106  1.1  nonaka #define	NVME_COMMIT_ACTION_REPLACE_NO_ACTIVATE	0
    107  1.1  nonaka #define	NVME_COMMIT_ACTION_REPLACE_ACTIVATE	1
    108  1.1  nonaka #define	NVME_COMMIT_ACTION_ACTIVATE_RESET	2
    109  1.1  nonaka #define	NVME_COMMIT_ACTION_ACTIVATE_NO_RESET	3
    110  1.1  nonaka 
    111  1.1  nonaka /* Firmware Slot Information (Log Identifier 03h) */
    112  1.1  nonaka struct nvme_firmware_page {
    113  1.1  nonaka 	uint8_t			afi;
    114  1.1  nonaka #define	NVME_FW_PAGE_AFI_SLOT_RST	__BITS(4, 6)
    115  1.1  nonaka #define	NVME_FW_PAGE_AFI_SLOT		__BITS(0, 2)
    116  1.1  nonaka 	uint8_t			_reserved1[7];
    117  1.1  nonaka 
    118  1.1  nonaka 	uint64_t		revision[7];	/* revisions for 7 slots */
    119  1.1  nonaka 
    120  1.1  nonaka 	uint8_t			reserved[448];
    121  1.1  nonaka } __packed __aligned(4);
    122  1.1  nonaka 
    123  1.2  nonaka struct intel_log_temp_stats {
    124  1.2  nonaka 	uint64_t	current;
    125  1.2  nonaka 	uint64_t	overtemp_flag_last;
    126  1.2  nonaka 	uint64_t	overtemp_flag_life;
    127  1.2  nonaka 	uint64_t	max_temp;
    128  1.2  nonaka 	uint64_t	min_temp;
    129  1.2  nonaka 	uint64_t	_rsvd[5];
    130  1.2  nonaka 	uint64_t	max_oper_temp;
    131  1.2  nonaka 	uint64_t	min_oper_temp;
    132  1.2  nonaka 	uint64_t	est_offset;
    133  1.2  nonaka } __packed __aligned(4);
    134  1.2  nonaka 
    135  1.1  nonaka /* Commands Supported and Effects (Log Identifier 05h) */
    136  1.1  nonaka struct nvme_command_effeects_page {
    137  1.1  nonaka 	uint32_t		acs[256];
    138  1.1  nonaka #define	NVME_CE_PAGE_CS_CSE		__BITS(16, 18)
    139  1.1  nonaka #define	NVME_CE_PAGE_CS_CCC		__BIT(4)
    140  1.1  nonaka #define	NVME_CE_PAGE_CS_NIC		__BIT(3)
    141  1.1  nonaka #define	NVME_CE_PAGE_CS_NCC		__BIT(2)
    142  1.1  nonaka #define	NVME_CE_PAGE_CS_LBCC		__BIT(1)
    143  1.1  nonaka #define	NVME_CE_PAGE_CS_CSUPP		__BIT(0)
    144  1.1  nonaka 	uint32_t		iocs[256];
    145  1.1  nonaka 
    146  1.1  nonaka 	uint8_t			reserved[2048];
    147  1.1  nonaka } __packed __aligned(4);
    148  1.1  nonaka 
    149  1.1  nonaka #endif	/* __NVME_H__ */
    150