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