2015-06-17 21:23:32 +00:00
|
|
|
/*
|
|
|
|
* Copyright(c) 2013-2015 Intel Corporation. All rights reserved.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* General Public License for more details.
|
|
|
|
*/
|
|
|
|
#ifndef __NFIT_TEST_H__
|
|
|
|
#define __NFIT_TEST_H__
|
2016-06-17 18:08:06 +00:00
|
|
|
#include <linux/list.h>
|
2017-06-05 16:40:46 +00:00
|
|
|
#include <linux/uuid.h>
|
2016-10-06 18:22:37 +00:00
|
|
|
#include <linux/ioport.h>
|
|
|
|
#include <linux/spinlock_types.h>
|
|
|
|
|
|
|
|
struct nfit_test_request {
|
|
|
|
struct list_head list;
|
|
|
|
struct resource res;
|
|
|
|
};
|
2015-06-17 21:23:32 +00:00
|
|
|
|
|
|
|
struct nfit_test_resource {
|
2016-10-06 18:22:37 +00:00
|
|
|
struct list_head requests;
|
2015-06-17 21:23:32 +00:00
|
|
|
struct list_head list;
|
2016-10-06 18:22:37 +00:00
|
|
|
struct resource res;
|
2015-06-17 21:23:32 +00:00
|
|
|
struct device *dev;
|
2016-10-06 18:22:37 +00:00
|
|
|
spinlock_t lock;
|
|
|
|
int req_count;
|
2015-06-17 21:23:32 +00:00
|
|
|
void *buf;
|
|
|
|
};
|
|
|
|
|
2017-09-22 07:46:26 +00:00
|
|
|
#define ND_TRANSLATE_SPA_STATUS_INVALID_SPA 2
|
2017-10-30 20:22:20 +00:00
|
|
|
#define NFIT_ARS_INJECT_INVALID 2
|
|
|
|
|
|
|
|
enum err_inj_options {
|
|
|
|
ND_ARS_ERR_INJ_OPT_NOTIFY = 0,
|
|
|
|
};
|
2017-09-22 07:46:26 +00:00
|
|
|
|
|
|
|
/* nfit commands */
|
|
|
|
enum nfit_cmd_num {
|
|
|
|
NFIT_CMD_TRANSLATE_SPA = 5,
|
|
|
|
NFIT_CMD_ARS_INJECT_SET = 7,
|
|
|
|
NFIT_CMD_ARS_INJECT_CLEAR = 8,
|
|
|
|
NFIT_CMD_ARS_INJECT_GET = 9,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct nd_cmd_translate_spa {
|
|
|
|
__u64 spa;
|
|
|
|
__u32 status;
|
|
|
|
__u8 flags;
|
|
|
|
__u8 _reserved[3];
|
|
|
|
__u64 translate_length;
|
|
|
|
__u32 num_nvdimms;
|
|
|
|
struct nd_nvdimm_device {
|
|
|
|
__u32 nfit_device_handle;
|
|
|
|
__u32 _reserved;
|
|
|
|
__u64 dpa;
|
|
|
|
} __packed devices[0];
|
|
|
|
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct nd_cmd_ars_err_inj {
|
|
|
|
__u64 err_inj_spa_range_base;
|
|
|
|
__u64 err_inj_spa_range_length;
|
|
|
|
__u8 err_inj_options;
|
|
|
|
__u32 status;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct nd_cmd_ars_err_inj_clr {
|
|
|
|
__u64 err_inj_clr_spa_range_base;
|
|
|
|
__u64 err_inj_clr_spa_range_length;
|
|
|
|
__u32 status;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct nd_cmd_ars_err_inj_stat {
|
|
|
|
__u32 status;
|
|
|
|
__u32 inj_err_rec_count;
|
|
|
|
struct nd_error_stat_query_record {
|
|
|
|
__u64 err_inj_stat_spa_range_base;
|
|
|
|
__u64 err_inj_stat_spa_range_length;
|
|
|
|
} __packed record[0];
|
|
|
|
} __packed;
|
|
|
|
|
2016-12-05 21:43:25 +00:00
|
|
|
union acpi_object;
|
|
|
|
typedef void *acpi_handle;
|
|
|
|
|
2015-06-17 21:23:32 +00:00
|
|
|
typedef struct nfit_test_resource *(*nfit_test_lookup_fn)(resource_size_t);
|
2016-12-05 21:43:25 +00:00
|
|
|
typedef union acpi_object *(*nfit_test_evaluate_dsm_fn)(acpi_handle handle,
|
2017-06-05 16:40:46 +00:00
|
|
|
const guid_t *guid, u64 rev, u64 func,
|
|
|
|
union acpi_object *argv4);
|
2015-06-17 21:23:32 +00:00
|
|
|
void __iomem *__wrap_ioremap_nocache(resource_size_t offset,
|
|
|
|
unsigned long size);
|
|
|
|
void __wrap_iounmap(volatile void __iomem *addr);
|
2016-12-05 21:43:25 +00:00
|
|
|
void nfit_test_setup(nfit_test_lookup_fn lookup,
|
|
|
|
nfit_test_evaluate_dsm_fn evaluate);
|
2015-06-17 21:23:32 +00:00
|
|
|
void nfit_test_teardown(void);
|
2016-06-17 18:08:06 +00:00
|
|
|
struct nfit_test_resource *get_nfit_res(resource_size_t resource);
|
2015-06-17 21:23:32 +00:00
|
|
|
#endif
|