/* SPDX-License-Identifier: GPL-2.0-only */ #ifndef NDTEST_H #define NDTEST_H #include <linux/platform_device.h> #include <linux/libnvdimm.h> /* 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) struct ndtest_config; 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; struct ndtest_config *config; dma_addr_t *dcr_dma; dma_addr_t *label_dma; dma_addr_t *dimm_dma; }; struct ndtest_blk_mmio { void __iomem *base; u64 size; u64 base_offset; u32 line_size; u32 num_lines; u32 table_size; }; 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; }; 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; }; struct ndtest_config { struct ndtest_dimm *dimms; struct ndtest_region *regions; unsigned int dimm_count; unsigned int dimm_start; u8 num_regions; }; #endif /* NDTEST_H */