2019-05-29 17:18:09 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2017-04-08 01:33:36 +03:00
/*
* Copyright ( c ) 2016 Intel Corporation . All rights reserved .
*/
# ifndef __DAX_PRIVATE_H__
# define __DAX_PRIVATE_H__
# include <linux/device.h>
# include <linux/cdev.h>
2017-07-13 03:58:21 +03:00
/* private routines between core files */
struct dax_device ;
struct dax_device * inode_dax ( struct inode * inode ) ;
struct inode * dax_inode ( struct dax_device * dax_dev ) ;
2017-07-13 03:58:21 +03:00
int dax_bus_init ( void ) ;
void dax_bus_exit ( void ) ;
2017-07-13 03:58:21 +03:00
2017-04-08 01:33:36 +03:00
/**
* struct dax_region - mapping infrastructure for dax devices
* @ id : kernel - wide unique region for a memory range
2018-11-09 23:43:07 +03:00
* @ target_node : effective numa node if this memory range is onlined
2017-04-08 01:33:36 +03:00
* @ 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
*/
struct dax_region {
int id ;
2018-11-09 23:43:07 +03:00
int target_node ;
2017-04-08 01:33:36 +03:00
struct kref kref ;
struct device * dev ;
unsigned int align ;
struct resource res ;
} ;
/**
2018-10-30 01:52:42 +03:00
* struct dev_dax - instance data for a subdivision of a dax region , and
* data while the device is activated in the driver .
2017-04-08 01:33:36 +03:00
* @ region - parent region
2017-05-05 09:38:43 +03:00
* @ dax_dev - core dax functionality
2018-11-09 23:43:07 +03:00
* @ target_node : effective numa node if dev_dax memory range is onlined
2017-05-05 09:38:43 +03:00
* @ dev - device core
2018-10-30 01:52:42 +03:00
* @ pgmap - pgmap for memmap setup / lifetime ( driver owned )
2019-07-17 02:30:35 +03:00
* @ dax_mem_res : physical address range of hotadded DAX memory
2020-06-05 02:48:48 +03:00
* @ dax_mem_name : name for hotadded DAX memory via add_memory_driver_managed ( )
2017-04-08 01:33:36 +03:00
*/
2017-05-05 09:38:43 +03:00
struct dev_dax {
2017-04-08 01:33:36 +03:00
struct dax_region * region ;
2017-05-05 09:38:43 +03:00
struct dax_device * dax_dev ;
2018-11-09 23:43:07 +03:00
int target_node ;
2017-04-08 01:33:36 +03:00
struct device dev ;
2018-10-30 01:52:42 +03:00
struct dev_pagemap pgmap ;
2019-07-17 02:30:35 +03:00
struct resource * dax_kmem_res ;
2017-04-08 01:33:36 +03:00
} ;
2017-07-13 03:58:21 +03:00
static inline struct dev_dax * to_dev_dax ( struct device * dev )
{
return container_of ( dev , struct dev_dax , dev ) ;
}
2017-04-08 01:33:36 +03:00
# endif