summaryrefslogtreecommitdiffstats
path: root/drivers/dax/dax-private.h
diff options
context:
space:
mode:
authorDave Jiang <dave.jiang@intel.com>2017-04-08 00:33:36 +0200
committerDan Williams <dan.j.williams@intel.com>2017-04-13 06:56:43 +0200
commitefebc711180f7fed701f6e23f23814fcfda7fbfc (patch)
tree87dfee7140b895c1d3331386a72c20cd83d8174d /drivers/dax/dax-private.h
parentlibnvdimm: add support for clear poison list and badblocks for device dax (diff)
downloadlinux-efebc711180f7fed701f6e23f23814fcfda7fbfc.tar.xz
linux-efebc711180f7fed701f6e23f23814fcfda7fbfc.zip
device-dax, tools/testing/nvdimm: enable device-dax with mock resources
Provide a replacement pgoff_to_phys() that translates an nfit_test resource (allocated by vmalloc()) to a pfn. Signed-off-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/dax/dax-private.h')
-rw-r--r--drivers/dax/dax-private.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/drivers/dax/dax-private.h b/drivers/dax/dax-private.h
new file mode 100644
index 000000000000..b1cd7a8e5ab9
--- /dev/null
+++ b/drivers/dax/dax-private.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright(c) 2016 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ */
+#ifndef __DAX_PRIVATE_H__
+#define __DAX_PRIVATE_H__
+
+#include <linux/device.h>
+#include <linux/cdev.h>
+
+/**
+ * struct dax_region - mapping infrastructure for dax devices
+ * @id: kernel-wide unique region for a memory range
+ * @base: linear address corresponding to @res
+ * @kref: to pin while other agents have a need to do lookups
+ * @dev: parent device backing this region
+ * @align: allocation and mapping alignment for child dax devices
+ * @res: physical address range of the region
+ * @pfn_flags: identify whether the pfns are paged back or not
+ */
+struct dax_region {
+ int id;
+ struct ida ida;
+ void *base;
+ struct kref kref;
+ struct device *dev;
+ unsigned int align;
+ struct resource res;
+ unsigned long pfn_flags;
+};
+
+/**
+ * struct dax_dev - subdivision of a dax region
+ * @region - parent region
+ * @inode - inode
+ * @dev - device backing the character device
+ * @cdev - core chardev data
+ * @alive - !alive + srcu grace period == no new mappings can be established
+ * @id - child id in the region
+ * @num_resources - number of physical address extents in this device
+ * @res - array of physical address ranges
+ */
+struct dax_dev {
+ struct dax_region *region;
+ struct inode *inode;
+ struct device dev;
+ struct cdev cdev;
+ bool alive;
+ int id;
+ int num_resources;
+ struct resource res[0];
+};
+#endif