| # SPDX-License-Identifier: GPL-2.0-only | 
| menuconfig LIBNVDIMM | 
|     tristate "NVDIMM (Non-Volatile Memory Device) Support" | 
|     depends on PHYS_ADDR_T_64BIT | 
|     depends on HAS_IOMEM | 
|     depends on BLK_DEV | 
|     select MEMREGION | 
|     help | 
|       Generic support for non-volatile memory devices including | 
|       ACPI-6-NFIT defined resources.  On platforms that define an | 
|       NFIT, or otherwise can discover NVDIMM resources, a libnvdimm | 
|       bus is registered to advertise PMEM (persistent memory) | 
|       namespaces (/dev/pmemX) and BLK (sliding mmio window(s)) | 
|       namespaces (/dev/ndblkX.Y). A PMEM namespace refers to a | 
|       memory resource that may span multiple DIMMs and support DAX | 
|       (see CONFIG_DAX).  A BLK namespace refers to an NVDIMM control | 
|       region which exposes an mmio register set for windowed access | 
|       mode to non-volatile memory. | 
|   | 
| if LIBNVDIMM | 
|   | 
| config BLK_DEV_PMEM | 
|     tristate "PMEM: Persistent memory block device support" | 
|     default LIBNVDIMM | 
|     select DAX_DRIVER | 
|     select ND_BTT if BTT | 
|     select ND_PFN if NVDIMM_PFN | 
|     help | 
|       Memory ranges for PMEM are described by either an NFIT | 
|       (NVDIMM Firmware Interface Table, see CONFIG_NFIT_ACPI), a | 
|       non-standard OEM-specific E820 memory type (type-12, see | 
|       CONFIG_X86_PMEM_LEGACY), or it is manually specified by the | 
|       'memmap=nn[KMG]!ss[KMG]' kernel command line (see | 
|       Documentation/admin-guide/kernel-parameters.rst).  This driver converts | 
|       these persistent memory ranges into block devices that are | 
|       capable of DAX (direct-access) file system mappings.  See | 
|       Documentation/driver-api/nvdimm/nvdimm.rst for more details. | 
|   | 
|       Say Y if you want to use an NVDIMM | 
|   | 
| config ND_BLK | 
|     tristate "BLK: Block data window (aperture) device support" | 
|     default LIBNVDIMM | 
|     select ND_BTT if BTT | 
|     help | 
|       Support NVDIMMs, or other devices, that implement a BLK-mode | 
|       access capability.  BLK-mode access uses memory-mapped-i/o | 
|       apertures to access persistent media. | 
|   | 
|       Say Y if your platform firmware emits an ACPI.NFIT table | 
|       (CONFIG_ACPI_NFIT), or otherwise exposes BLK-mode | 
|       capabilities. | 
|   | 
| config ND_CLAIM | 
|     bool | 
|   | 
| config ND_BTT | 
|     tristate | 
|   | 
| config BTT | 
|     bool "BTT: Block Translation Table (atomic sector updates)" | 
|     default y if LIBNVDIMM | 
|     select ND_CLAIM | 
|     help | 
|       The Block Translation Table (BTT) provides atomic sector | 
|       update semantics for persistent memory devices, so that | 
|       applications that rely on sector writes not being torn (a | 
|       guarantee that typical disks provide) can continue to do so. | 
|       The BTT manifests itself as an alternate personality for an | 
|       NVDIMM namespace, i.e. a namespace can be in raw mode (pmemX, | 
|       ndblkX.Y, etc...), or 'sectored' mode, (pmemXs, ndblkX.Ys, | 
|       etc...). | 
|   | 
|       Select Y if unsure | 
|   | 
| config ND_PFN | 
|     tristate | 
|   | 
| config NVDIMM_PFN | 
|     bool "PFN: Map persistent (device) memory" | 
|     default LIBNVDIMM | 
|     depends on ZONE_DEVICE | 
|     select ND_CLAIM | 
|     help | 
|       Map persistent memory, i.e. advertise it to the memory | 
|       management sub-system.  By default persistent memory does | 
|       not support direct I/O, RDMA, or any other usage that | 
|       requires a 'struct page' to mediate an I/O request.  This | 
|       driver allocates and initializes the infrastructure needed | 
|       to support those use cases. | 
|   | 
|       Select Y if unsure | 
|   | 
| config NVDIMM_DAX | 
|     bool "NVDIMM DAX: Raw access to persistent memory" | 
|     default LIBNVDIMM | 
|     depends on NVDIMM_PFN | 
|     help | 
|       Support raw device dax access to a persistent memory | 
|       namespace.  For environments that want to hard partition | 
|       persistent memory, this capability provides a mechanism to | 
|       sub-divide a namespace into character devices that can only be | 
|       accessed via DAX (mmap(2)). | 
|   | 
|       Select Y if unsure | 
|   | 
| config OF_PMEM | 
|     tristate "Device-tree support for persistent memory regions" | 
|     depends on OF | 
|     default LIBNVDIMM | 
|     help | 
|       Allows regions of persistent memory to be described in the | 
|       device-tree. | 
|   | 
|       Select Y if unsure. | 
|   | 
| config NVDIMM_KEYS | 
|     def_bool y | 
|     depends on ENCRYPTED_KEYS | 
|     depends on (LIBNVDIMM=ENCRYPTED_KEYS) || LIBNVDIMM=m | 
|   | 
| config NVDIMM_TEST_BUILD | 
|     tristate "Build the unit test core" | 
|     depends on m | 
|     depends on COMPILE_TEST && X86_64 | 
|     default m if COMPILE_TEST | 
|     help | 
|       Build the core of the unit test infrastructure. The result of | 
|       this build is non-functional for unit test execution, but it | 
|       otherwise helps catch build errors induced by changes to the | 
|       core devm_memremap_pages() implementation and other | 
|       infrastructure. | 
|   | 
| endif |