1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * This file is auto-generated. Modifications will be lost. 3*8d67ca89SAndroid Build Coastguard Worker * 4*8d67ca89SAndroid Build Coastguard Worker * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5*8d67ca89SAndroid Build Coastguard Worker * for more information. 6*8d67ca89SAndroid Build Coastguard Worker */ 7*8d67ca89SAndroid Build Coastguard Worker #ifndef __NDCTL_H__ 8*8d67ca89SAndroid Build Coastguard Worker #define __NDCTL_H__ 9*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h> 10*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_dimm_flags { 11*8d67ca89SAndroid Build Coastguard Worker __u32 status; 12*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 13*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 14*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_get_config_size { 15*8d67ca89SAndroid Build Coastguard Worker __u32 status; 16*8d67ca89SAndroid Build Coastguard Worker __u32 config_size; 17*8d67ca89SAndroid Build Coastguard Worker __u32 max_xfer; 18*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 19*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_get_config_data_hdr { 20*8d67ca89SAndroid Build Coastguard Worker __u32 in_offset; 21*8d67ca89SAndroid Build Coastguard Worker __u32 in_length; 22*8d67ca89SAndroid Build Coastguard Worker __u32 status; 23*8d67ca89SAndroid Build Coastguard Worker __u8 out_buf[]; 24*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 25*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_set_config_hdr { 26*8d67ca89SAndroid Build Coastguard Worker __u32 in_offset; 27*8d67ca89SAndroid Build Coastguard Worker __u32 in_length; 28*8d67ca89SAndroid Build Coastguard Worker __u8 in_buf[]; 29*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 30*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_vendor_hdr { 31*8d67ca89SAndroid Build Coastguard Worker __u32 opcode; 32*8d67ca89SAndroid Build Coastguard Worker __u32 in_length; 33*8d67ca89SAndroid Build Coastguard Worker __u8 in_buf[]; 34*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 35*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_vendor_tail { 36*8d67ca89SAndroid Build Coastguard Worker __u32 status; 37*8d67ca89SAndroid Build Coastguard Worker __u32 out_length; 38*8d67ca89SAndroid Build Coastguard Worker __u8 out_buf[]; 39*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 40*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_ars_cap { 41*8d67ca89SAndroid Build Coastguard Worker __u64 address; 42*8d67ca89SAndroid Build Coastguard Worker __u64 length; 43*8d67ca89SAndroid Build Coastguard Worker __u32 status; 44*8d67ca89SAndroid Build Coastguard Worker __u32 max_ars_out; 45*8d67ca89SAndroid Build Coastguard Worker __u32 clear_err_unit; 46*8d67ca89SAndroid Build Coastguard Worker __u16 flags; 47*8d67ca89SAndroid Build Coastguard Worker __u16 reserved; 48*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 49*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_ars_start { 50*8d67ca89SAndroid Build Coastguard Worker __u64 address; 51*8d67ca89SAndroid Build Coastguard Worker __u64 length; 52*8d67ca89SAndroid Build Coastguard Worker __u16 type; 53*8d67ca89SAndroid Build Coastguard Worker __u8 flags; 54*8d67ca89SAndroid Build Coastguard Worker __u8 reserved[5]; 55*8d67ca89SAndroid Build Coastguard Worker __u32 status; 56*8d67ca89SAndroid Build Coastguard Worker __u32 scrub_time; 57*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 58*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_ars_status { 59*8d67ca89SAndroid Build Coastguard Worker __u32 status; 60*8d67ca89SAndroid Build Coastguard Worker __u32 out_length; 61*8d67ca89SAndroid Build Coastguard Worker __u64 address; 62*8d67ca89SAndroid Build Coastguard Worker __u64 length; 63*8d67ca89SAndroid Build Coastguard Worker __u64 restart_address; 64*8d67ca89SAndroid Build Coastguard Worker __u64 restart_length; 65*8d67ca89SAndroid Build Coastguard Worker __u16 type; 66*8d67ca89SAndroid Build Coastguard Worker __u16 flags; 67*8d67ca89SAndroid Build Coastguard Worker __u32 num_records; 68*8d67ca89SAndroid Build Coastguard Worker struct nd_ars_record { 69*8d67ca89SAndroid Build Coastguard Worker __u32 handle; 70*8d67ca89SAndroid Build Coastguard Worker __u32 reserved; 71*8d67ca89SAndroid Build Coastguard Worker __u64 err_address; 72*8d67ca89SAndroid Build Coastguard Worker __u64 length; 73*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)) records[]; 74*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 75*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_clear_error { 76*8d67ca89SAndroid Build Coastguard Worker __u64 address; 77*8d67ca89SAndroid Build Coastguard Worker __u64 length; 78*8d67ca89SAndroid Build Coastguard Worker __u32 status; 79*8d67ca89SAndroid Build Coastguard Worker __u8 reserved[4]; 80*8d67ca89SAndroid Build Coastguard Worker __u64 cleared; 81*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__)); 82*8d67ca89SAndroid Build Coastguard Worker enum { 83*8d67ca89SAndroid Build Coastguard Worker ND_CMD_IMPLEMENTED = 0, 84*8d67ca89SAndroid Build Coastguard Worker ND_CMD_ARS_CAP = 1, 85*8d67ca89SAndroid Build Coastguard Worker ND_CMD_ARS_START = 2, 86*8d67ca89SAndroid Build Coastguard Worker ND_CMD_ARS_STATUS = 3, 87*8d67ca89SAndroid Build Coastguard Worker ND_CMD_CLEAR_ERROR = 4, 88*8d67ca89SAndroid Build Coastguard Worker ND_CMD_SMART = 1, 89*8d67ca89SAndroid Build Coastguard Worker ND_CMD_SMART_THRESHOLD = 2, 90*8d67ca89SAndroid Build Coastguard Worker ND_CMD_DIMM_FLAGS = 3, 91*8d67ca89SAndroid Build Coastguard Worker ND_CMD_GET_CONFIG_SIZE = 4, 92*8d67ca89SAndroid Build Coastguard Worker ND_CMD_GET_CONFIG_DATA = 5, 93*8d67ca89SAndroid Build Coastguard Worker ND_CMD_SET_CONFIG_DATA = 6, 94*8d67ca89SAndroid Build Coastguard Worker ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7, 95*8d67ca89SAndroid Build Coastguard Worker ND_CMD_VENDOR_EFFECT_LOG = 8, 96*8d67ca89SAndroid Build Coastguard Worker ND_CMD_VENDOR = 9, 97*8d67ca89SAndroid Build Coastguard Worker ND_CMD_CALL = 10, 98*8d67ca89SAndroid Build Coastguard Worker }; 99*8d67ca89SAndroid Build Coastguard Worker enum { 100*8d67ca89SAndroid Build Coastguard Worker ND_ARS_VOLATILE = 1, 101*8d67ca89SAndroid Build Coastguard Worker ND_ARS_PERSISTENT = 2, 102*8d67ca89SAndroid Build Coastguard Worker ND_ARS_RETURN_PREV_DATA = 1 << 1, 103*8d67ca89SAndroid Build Coastguard Worker ND_CONFIG_LOCKED = 1, 104*8d67ca89SAndroid Build Coastguard Worker }; 105*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL 'N' 106*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_DIMM_FLAGS _IOWR(ND_IOCTL, ND_CMD_DIMM_FLAGS, struct nd_cmd_dimm_flags) 107*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_GET_CONFIG_SIZE _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_SIZE, struct nd_cmd_get_config_size) 108*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_GET_CONFIG_DATA _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_DATA, struct nd_cmd_get_config_data_hdr) 109*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_SET_CONFIG_DATA _IOWR(ND_IOCTL, ND_CMD_SET_CONFIG_DATA, struct nd_cmd_set_config_hdr) 110*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_VENDOR _IOWR(ND_IOCTL, ND_CMD_VENDOR, struct nd_cmd_vendor_hdr) 111*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_ARS_CAP _IOWR(ND_IOCTL, ND_CMD_ARS_CAP, struct nd_cmd_ars_cap) 112*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_ARS_START _IOWR(ND_IOCTL, ND_CMD_ARS_START, struct nd_cmd_ars_start) 113*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_ARS_STATUS _IOWR(ND_IOCTL, ND_CMD_ARS_STATUS, struct nd_cmd_ars_status) 114*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_CLEAR_ERROR _IOWR(ND_IOCTL, ND_CMD_CLEAR_ERROR, struct nd_cmd_clear_error) 115*8d67ca89SAndroid Build Coastguard Worker #define ND_DEVICE_DIMM 1 116*8d67ca89SAndroid Build Coastguard Worker #define ND_DEVICE_REGION_PMEM 2 117*8d67ca89SAndroid Build Coastguard Worker #define ND_DEVICE_REGION_BLK 3 118*8d67ca89SAndroid Build Coastguard Worker #define ND_DEVICE_NAMESPACE_IO 4 119*8d67ca89SAndroid Build Coastguard Worker #define ND_DEVICE_NAMESPACE_PMEM 5 120*8d67ca89SAndroid Build Coastguard Worker #define ND_DEVICE_DAX_PMEM 7 121*8d67ca89SAndroid Build Coastguard Worker enum nd_driver_flags { 122*8d67ca89SAndroid Build Coastguard Worker ND_DRIVER_DIMM = 1 << ND_DEVICE_DIMM, 123*8d67ca89SAndroid Build Coastguard Worker ND_DRIVER_REGION_PMEM = 1 << ND_DEVICE_REGION_PMEM, 124*8d67ca89SAndroid Build Coastguard Worker ND_DRIVER_REGION_BLK = 1 << ND_DEVICE_REGION_BLK, 125*8d67ca89SAndroid Build Coastguard Worker ND_DRIVER_NAMESPACE_IO = 1 << ND_DEVICE_NAMESPACE_IO, 126*8d67ca89SAndroid Build Coastguard Worker ND_DRIVER_NAMESPACE_PMEM = 1 << ND_DEVICE_NAMESPACE_PMEM, 127*8d67ca89SAndroid Build Coastguard Worker ND_DRIVER_DAX_PMEM = 1 << ND_DEVICE_DAX_PMEM, 128*8d67ca89SAndroid Build Coastguard Worker }; 129*8d67ca89SAndroid Build Coastguard Worker enum ars_masks { 130*8d67ca89SAndroid Build Coastguard Worker ARS_STATUS_MASK = 0x0000FFFF, 131*8d67ca89SAndroid Build Coastguard Worker ARS_EXT_STATUS_SHIFT = 16, 132*8d67ca89SAndroid Build Coastguard Worker }; 133*8d67ca89SAndroid Build Coastguard Worker struct nd_cmd_pkg { 134*8d67ca89SAndroid Build Coastguard Worker __u64 nd_family; 135*8d67ca89SAndroid Build Coastguard Worker __u64 nd_command; 136*8d67ca89SAndroid Build Coastguard Worker __u32 nd_size_in; 137*8d67ca89SAndroid Build Coastguard Worker __u32 nd_size_out; 138*8d67ca89SAndroid Build Coastguard Worker __u32 nd_reserved2[9]; 139*8d67ca89SAndroid Build Coastguard Worker __u32 nd_fw_size; 140*8d67ca89SAndroid Build Coastguard Worker unsigned char nd_payload[]; 141*8d67ca89SAndroid Build Coastguard Worker }; 142*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_FAMILY_INTEL 0 143*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_FAMILY_HPE1 1 144*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_FAMILY_HPE2 2 145*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_FAMILY_MSFT 3 146*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_FAMILY_HYPERV 4 147*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_FAMILY_PAPR 5 148*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_FAMILY_MAX NVDIMM_FAMILY_PAPR 149*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_BUS_FAMILY_NFIT 0 150*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_BUS_FAMILY_INTEL 1 151*8d67ca89SAndroid Build Coastguard Worker #define NVDIMM_BUS_FAMILY_MAX NVDIMM_BUS_FAMILY_INTEL 152*8d67ca89SAndroid Build Coastguard Worker #define ND_IOCTL_CALL _IOWR(ND_IOCTL, ND_CMD_CALL, struct nd_cmd_pkg) 153*8d67ca89SAndroid Build Coastguard Worker #endif 154