1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2f295e53bSDan Williams #ifndef __NVDIMM_PMEM_H__ 3f295e53bSDan Williams #define __NVDIMM_PMEM_H__ 4c953cc98SDan Williams #include <linux/page-flags.h> 5f295e53bSDan Williams #include <linux/badblocks.h> 6dc90f084SChristoph Hellwig #include <linux/memremap.h> 7f295e53bSDan Williams #include <linux/types.h> 8f295e53bSDan Williams #include <linux/pfn_t.h> 9f295e53bSDan Williams #include <linux/fs.h> 10f295e53bSDan Williams 11*e511c4a3SJane Chu enum dax_access_mode; 12*e511c4a3SJane Chu 13f295e53bSDan Williams /* this definition is in it's own header for tools/testing/nvdimm to consume */ 14f295e53bSDan Williams struct pmem_device { 15f295e53bSDan Williams /* One contiguous memory region per device */ 16f295e53bSDan Williams phys_addr_t phys_addr; 17f295e53bSDan Williams /* when non-zero this device is hosting a 'pfn' instance */ 18f295e53bSDan Williams phys_addr_t data_offset; 19f295e53bSDan Williams u64 pfn_flags; 207a9eb206SDan Williams void *virt_addr; 21f295e53bSDan Williams /* immutable base size of the namespace */ 22f295e53bSDan Williams size_t size; 23f295e53bSDan Williams /* trim size when namespace capacity has been section aligned */ 24f295e53bSDan Williams u32 pfn_pad; 25975750a9SToshi Kani struct kernfs_node *bb_state; 26f295e53bSDan Williams struct badblocks bb; 27c1d6e828SDan Williams struct dax_device *dax_dev; 28c1d6e828SDan Williams struct gendisk *disk; 29e8d51348SChristoph Hellwig struct dev_pagemap pgmap; 30f295e53bSDan Williams }; 31c1d6e828SDan Williams 32c1d6e828SDan Williams long __pmem_direct_access(struct pmem_device *pmem, pgoff_t pgoff, 33*e511c4a3SJane Chu long nr_pages, enum dax_access_mode mode, void **kaddr, 34*e511c4a3SJane Chu pfn_t *pfn); 35c953cc98SDan Williams 36c953cc98SDan Williams #ifdef CONFIG_MEMORY_FAILURE test_and_clear_pmem_poison(struct page * page)37c953cc98SDan Williamsstatic inline bool test_and_clear_pmem_poison(struct page *page) 38c953cc98SDan Williams { 39c953cc98SDan Williams return TestClearPageHWPoison(page); 40c953cc98SDan Williams } 41c953cc98SDan Williams #else test_and_clear_pmem_poison(struct page * page)42c953cc98SDan Williamsstatic inline bool test_and_clear_pmem_poison(struct page *page) 43c953cc98SDan Williams { 44c953cc98SDan Williams return false; 45c953cc98SDan Williams } 46c953cc98SDan Williams #endif 47f295e53bSDan Williams #endif /* __NVDIMM_PMEM_H__ */ 48