blob: ae9e5ce535ad7a3970de02f99e00d1706a328db5 [file] [log] [blame]
/*
*
* Copyright (c) 2017 Hewlett Packard Enterprise Development LP
* Copyright (c) 2017 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU Lesser General Public License,
* version 2.1, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
* more details.
*/
#ifndef __LIBNDCTL_NFIT_H__
#define __LIBNDCTL_NFIT_H__
/*
* libndctl-nfit.h : definitions for NFIT related commands/functions.
*/
/* nfit command numbers which are called via ND_CMD_CALL */
enum {
NFIT_CMD_TRANSLATE_SPA = 5,
NFIT_CMD_ARS_INJECT_SET = 7,
NFIT_CMD_ARS_INJECT_CLEAR = 8,
NFIT_CMD_ARS_INJECT_GET = 9,
};
/* error number of Translate SPA by firmware */
#define ND_TRANSLATE_SPA_STATUS_INVALID_SPA 2
/*
* The following structures are command packages which are
* defined by ACPI 6.2 (or later).
*/
/* For Translate SPA */
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;
} __attribute__((packed)) devices[0];
} __attribute__((packed));
/* For ARS Error Inject */
struct nd_cmd_ars_err_inj {
__u64 err_inj_spa_range_base;
__u64 err_inj_spa_range_length;
__u8 err_inj_options;
__u32 status;
} __attribute__((packed));
/* For ARS Error Inject Clear */
struct nd_cmd_ars_err_inj_clr {
__u64 err_inj_clr_spa_range_base;
__u64 err_inj_clr_spa_range_length;
__u32 status;
} __attribute__((packed));
/* For ARS Error Inject Status Query */
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;
} __attribute__((packed)) record[0];
} __attribute__((packed));
int ndctl_bus_is_nfit_cmd_supported(struct ndctl_bus *bus, int cmd);
#endif /* __LIBNDCTL_NFIT_H__ */