root/tools/testing/nvdimm/test/ndtest.h
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef NDTEST_H
#define NDTEST_H

#include <linux/platform_device.h>
#include <linux/libnvdimm.h>

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 */