#include <linux/libnvdimm.h>
#include <asm/unaligned.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/ndctl.h>
#include <linux/async.h>
#include <linux/slab.h>
#include <linux/nd.h>
#include "cxlmem.h"
#include "cxl.h"
static __read_mostly DECLARE_BITMAP(exclusive_cmds, CXL_MEM_COMMAND_ID_MAX);
static void clear_exclusive(void *mds)
{ … }
static void unregister_nvdimm(void *nvdimm)
{ … }
static ssize_t provider_show(struct device *dev, struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(provider);
static ssize_t id_show(struct device *dev, struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(id);
static struct attribute *cxl_dimm_attributes[] = …;
static const struct attribute_group cxl_dimm_attribute_group = …;
static const struct attribute_group *cxl_dimm_attribute_groups[] = …;
static int cxl_nvdimm_probe(struct device *dev)
{ … }
static struct cxl_driver cxl_nvdimm_driver = …;
static int cxl_pmem_get_config_size(struct cxl_memdev_state *mds,
struct nd_cmd_get_config_size *cmd,
unsigned int buf_len)
{ … }
static int cxl_pmem_get_config_data(struct cxl_memdev_state *mds,
struct nd_cmd_get_config_data_hdr *cmd,
unsigned int buf_len)
{ … }
static int cxl_pmem_set_config_data(struct cxl_memdev_state *mds,
struct nd_cmd_set_config_hdr *cmd,
unsigned int buf_len)
{ … }
static int cxl_pmem_nvdimm_ctl(struct nvdimm *nvdimm, unsigned int cmd,
void *buf, unsigned int buf_len)
{ … }
static int cxl_pmem_ctl(struct nvdimm_bus_descriptor *nd_desc,
struct nvdimm *nvdimm, unsigned int cmd, void *buf,
unsigned int buf_len, int *cmd_rc)
{ … }
static int detach_nvdimm(struct device *dev, void *data)
{ … }
static void unregister_nvdimm_bus(void *_cxl_nvb)
{ … }
static int cxl_nvdimm_bridge_probe(struct device *dev)
{ … }
static struct cxl_driver cxl_nvdimm_bridge_driver = …;
static void unregister_nvdimm_region(void *nd_region)
{ … }
static void cxlr_pmem_remove_resource(void *res)
{ … }
struct cxl_pmem_region_info { … };
static int cxl_pmem_region_probe(struct device *dev)
{ … }
static struct cxl_driver cxl_pmem_region_driver = …;
static __init int cxl_pmem_init(void)
{ … }
static __exit void cxl_pmem_exit(void)
{ … }
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
module_init(…) …;
module_exit(cxl_pmem_exit);
MODULE_IMPORT_NS(…);
MODULE_ALIAS_CXL(…);
MODULE_ALIAS_CXL(…);
MODULE_ALIAS_CXL(…);