1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright(c) 2013-2015 Intel Corporation. All rights reserved.
5 #ifndef __NFIT_TEST_H__
6 #define __NFIT_TEST_H__
7 #include <linux/list.h>
8 #include <linux/uuid.h>
9 #include <linux/ioport.h>
10 #include <linux/spinlock_types.h>
12 struct nfit_test_request {
13 struct list_head list;
17 struct nfit_test_resource {
18 struct list_head requests;
19 struct list_head list;
27 #define ND_TRANSLATE_SPA_STATUS_INVALID_SPA 2
28 #define NFIT_ARS_INJECT_INVALID 2
30 enum err_inj_options {
31 ND_ARS_ERR_INJ_OPT_NOTIFY = 0,
36 NFIT_CMD_TRANSLATE_SPA = 5,
37 NFIT_CMD_ARS_INJECT_SET = 7,
38 NFIT_CMD_ARS_INJECT_CLEAR = 8,
39 NFIT_CMD_ARS_INJECT_GET = 9,
42 struct nd_cmd_translate_spa {
47 __u64 translate_length;
49 struct nd_nvdimm_device {
50 __u32 nfit_device_handle;
53 } __packed devices[0];
57 struct nd_cmd_ars_err_inj {
58 __u64 err_inj_spa_range_base;
59 __u64 err_inj_spa_range_length;
64 struct nd_cmd_ars_err_inj_clr {
65 __u64 err_inj_clr_spa_range_base;
66 __u64 err_inj_clr_spa_range_length;
70 struct nd_cmd_ars_err_inj_stat {
72 __u32 inj_err_rec_count;
73 struct nd_error_stat_query_record {
74 __u64 err_inj_stat_spa_range_base;
75 __u64 err_inj_stat_spa_range_length;
79 #define ND_INTEL_SMART 1
80 #define ND_INTEL_SMART_THRESHOLD 2
81 #define ND_INTEL_ENABLE_LSS_STATUS 10
82 #define ND_INTEL_FW_GET_INFO 12
83 #define ND_INTEL_FW_START_UPDATE 13
84 #define ND_INTEL_FW_SEND_DATA 14
85 #define ND_INTEL_FW_FINISH_UPDATE 15
86 #define ND_INTEL_FW_FINISH_QUERY 16
87 #define ND_INTEL_SMART_SET_THRESHOLD 17
88 #define ND_INTEL_SMART_INJECT 18
90 #define ND_INTEL_SMART_HEALTH_VALID (1 << 0)
91 #define ND_INTEL_SMART_SPARES_VALID (1 << 1)
92 #define ND_INTEL_SMART_USED_VALID (1 << 2)
93 #define ND_INTEL_SMART_MTEMP_VALID (1 << 3)
94 #define ND_INTEL_SMART_CTEMP_VALID (1 << 4)
95 #define ND_INTEL_SMART_SHUTDOWN_COUNT_VALID (1 << 5)
96 #define ND_INTEL_SMART_AIT_STATUS_VALID (1 << 6)
97 #define ND_INTEL_SMART_PTEMP_VALID (1 << 7)
98 #define ND_INTEL_SMART_ALARM_VALID (1 << 9)
99 #define ND_INTEL_SMART_SHUTDOWN_VALID (1 << 10)
100 #define ND_INTEL_SMART_VENDOR_VALID (1 << 11)
101 #define ND_INTEL_SMART_SPARE_TRIP (1 << 0)
102 #define ND_INTEL_SMART_TEMP_TRIP (1 << 1)
103 #define ND_INTEL_SMART_CTEMP_TRIP (1 << 2)
104 #define ND_INTEL_SMART_NON_CRITICAL_HEALTH (1 << 0)
105 #define ND_INTEL_SMART_CRITICAL_HEALTH (1 << 1)
106 #define ND_INTEL_SMART_FATAL_HEALTH (1 << 2)
107 #define ND_INTEL_SMART_INJECT_MTEMP (1 << 0)
108 #define ND_INTEL_SMART_INJECT_SPARE (1 << 1)
109 #define ND_INTEL_SMART_INJECT_FATAL (1 << 2)
110 #define ND_INTEL_SMART_INJECT_SHUTDOWN (1 << 3)
112 struct nd_intel_smart_threshold {
118 __u16 media_temperature;
119 __u16 ctrl_temperature;
126 struct nd_intel_smart_set_threshold {
129 __u16 media_temperature;
130 __u16 ctrl_temperature;
134 struct nd_intel_smart_inject {
137 __u16 media_temperature;
141 __u8 unsafe_shutdown_enable;
145 #define INTEL_FW_STORAGE_SIZE 0x100000
146 #define INTEL_FW_MAX_SEND_LEN 0xFFEC
147 #define INTEL_FW_QUERY_INTERVAL 250000
148 #define INTEL_FW_QUERY_MAX_TIME 3000000
149 #define INTEL_FW_FIS_VERSION 0x0105
150 #define INTEL_FW_FAKE_VERSION 0xffffffffabcd
152 enum intel_fw_update_state {
154 FW_STATE_IN_PROGRESS,
159 struct nd_intel_fw_info {
163 __u32 query_interval;
164 __u32 max_query_time;
169 __u64 updated_version;
172 struct nd_intel_fw_start {
177 /* this one has the output first because the variable input data size */
178 struct nd_intel_fw_send_data {
183 /* this field is not declared due ot variable data from input */
187 struct nd_intel_fw_finish_update {
194 struct nd_intel_fw_finish_query {
197 __u64 updated_fw_rev;
200 struct nd_intel_lss {
206 typedef void *acpi_handle;
208 typedef struct nfit_test_resource *(*nfit_test_lookup_fn)(resource_size_t);
209 typedef union acpi_object *(*nfit_test_evaluate_dsm_fn)(acpi_handle handle,
210 const guid_t *guid, u64 rev, u64 func,
211 union acpi_object *argv4);
212 void __iomem *__wrap_ioremap_nocache(resource_size_t offset,
214 void __wrap_iounmap(volatile void __iomem *addr);
215 void nfit_test_setup(nfit_test_lookup_fn lookup,
216 nfit_test_evaluate_dsm_fn evaluate);
217 void nfit_test_teardown(void);
218 struct nfit_test_resource *get_nfit_res(resource_size_t resource);