2020-12-22 09:52:34 +05:30
/* SPDX-License-Identifier: GPL-2.0-only */
# ifndef NDTEST_H
# define NDTEST_H
# include <linux/platform_device.h>
# include <linux/libnvdimm.h>
2020-12-22 09:52:40 +05:30
/* SCM device is unable to persist memory contents */
# define PAPR_PMEM_UNARMED (1ULL << (63 - 0))
/* SCM device failed to persist memory contents */
# define PAPR_PMEM_SHUTDOWN_DIRTY (1ULL << (63 - 1))
/* SCM device contents are not persisted from previous IPL */
# define PAPR_PMEM_EMPTY (1ULL << (63 - 3))
# define PAPR_PMEM_HEALTH_CRITICAL (1ULL << (63 - 4))
/* SCM device will be garded off next IPL due to failure */
# define PAPR_PMEM_HEALTH_FATAL (1ULL << (63 - 5))
/* SCM contents cannot persist due to current platform health status */
# define PAPR_PMEM_HEALTH_UNHEALTHY (1ULL << (63 - 6))
/* Bits status indicators for health bitmap indicating unarmed dimm */
# define PAPR_PMEM_UNARMED_MASK (PAPR_PMEM_UNARMED | \
PAPR_PMEM_HEALTH_UNHEALTHY )
# define PAPR_PMEM_SAVE_FAILED (1ULL << (63 - 10))
/* Bits status indicators for health bitmap indicating unflushed dimm */
# define PAPR_PMEM_BAD_SHUTDOWN_MASK (PAPR_PMEM_SHUTDOWN_DIRTY)
/* Bits status indicators for health bitmap indicating unrestored dimm */
# define PAPR_PMEM_BAD_RESTORE_MASK (PAPR_PMEM_EMPTY)
/* Bit status indicators for smart event notification */
# define PAPR_PMEM_SMART_EVENT_MASK (PAPR_PMEM_HEALTH_CRITICAL | \
PAPR_PMEM_HEALTH_FATAL | \
PAPR_PMEM_HEALTH_UNHEALTHY )
# define PAPR_PMEM_SAVE_MASK (PAPR_PMEM_SAVE_FAILED)
2020-12-22 09:52:36 +05:30
struct ndtest_config ;
2020-12-22 09:52:34 +05:30
struct ndtest_priv {
struct platform_device pdev ;
struct device_node * dn ;
struct list_head resources ;
struct nvdimm_bus_descriptor bus_desc ;
struct nvdimm_bus * bus ;
2020-12-22 09:52:36 +05:30
struct ndtest_config * config ;
dma_addr_t * dcr_dma ;
dma_addr_t * label_dma ;
dma_addr_t * dimm_dma ;
} ;
2020-12-22 09:52:38 +05:30
struct ndtest_blk_mmio {
void __iomem * base ;
u64 size ;
u64 base_offset ;
u32 line_size ;
u32 num_lines ;
u32 table_size ;
} ;
2020-12-22 09:52:36 +05:30
struct ndtest_dimm {
struct device * dev ;
struct nvdimm * nvdimm ;
struct ndtest_blk_mmio * mmio ;
struct nd_region * blk_region ;
dma_addr_t address ;
unsigned long long flags ;
unsigned long config_size ;
void * label_area ;
char * uuid_str ;
unsigned int size ;
unsigned int handle ;
unsigned int fail_cmd ;
unsigned int physical_id ;
unsigned int num_formats ;
int id ;
int fail_cmd_code ;
u8 no_alias ;
} ;
2020-12-22 09:52:38 +05:30
struct ndtest_mapping {
u64 start ;
u64 size ;
u8 position ;
u8 dimm ;
} ;
struct ndtest_region {
struct nd_region * region ;
struct ndtest_mapping * mapping ;
u64 size ;
u8 type ;
u8 num_mappings ;
u8 range_index ;
} ;
2020-12-22 09:52:36 +05:30
struct ndtest_config {
struct ndtest_dimm * dimms ;
2020-12-22 09:52:38 +05:30
struct ndtest_region * regions ;
2020-12-22 09:52:36 +05:30
unsigned int dimm_count ;
unsigned int dimm_start ;
u8 num_regions ;
2020-12-22 09:52:34 +05:30
} ;
# endif /* NDTEST_H */