|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | #ifndef __NVDIMM_PMEM_H__ | 
|  | #define __NVDIMM_PMEM_H__ | 
|  | #include <linux/badblocks.h> | 
|  | #include <linux/types.h> | 
|  | #include <linux/pfn_t.h> | 
|  | #include <linux/fs.h> | 
|  |  | 
|  | /* this definition is in it's own header for tools/testing/nvdimm to consume */ | 
|  | struct pmem_device { | 
|  | /* One contiguous memory region per device */ | 
|  | phys_addr_t		phys_addr; | 
|  | /* when non-zero this device is hosting a 'pfn' instance */ | 
|  | phys_addr_t		data_offset; | 
|  | u64			pfn_flags; | 
|  | void			*virt_addr; | 
|  | /* immutable base size of the namespace */ | 
|  | size_t			size; | 
|  | /* trim size when namespace capacity has been section aligned */ | 
|  | u32			pfn_pad; | 
|  | struct kernfs_node	*bb_state; | 
|  | struct badblocks	bb; | 
|  | struct dax_device	*dax_dev; | 
|  | struct gendisk		*disk; | 
|  | }; | 
|  |  | 
|  | long __pmem_direct_access(struct pmem_device *pmem, pgoff_t pgoff, | 
|  | long nr_pages, void **kaddr, pfn_t *pfn); | 
|  | #endif /* __NVDIMM_PMEM_H__ */ |