151cf784cSDan Williams // SPDX-License-Identifier: GPL-2.0 251cf784cSDan Williams /* Copyright(c) 2016 - 2018 Intel Corporation. All rights reserved. */ 351cf784cSDan Williams #ifndef __DAX_BUS_H__ 451cf784cSDan Williams #define __DAX_BUS_H__ 5730926c3SDan Williams #include <linux/device.h> 6f5516ec5SDan Williams #include <linux/range.h> 7730926c3SDan Williams 851cf784cSDan Williams struct dev_dax; 951cf784cSDan Williams struct resource; 1051cf784cSDan Williams struct dax_device; 1151cf784cSDan Williams struct dax_region; 12c2f3011eSDan Williams 13*e9ee9fe3SDan Williams /* dax bus specific ioresource flags */ 14*e9ee9fe3SDan Williams #define IORESOURCE_DAX_STATIC BIT(0) 15*e9ee9fe3SDan Williams #define IORESOURCE_DAX_KMEM BIT(1) 16*e9ee9fe3SDan Williams 1751cf784cSDan Williams struct dax_region *alloc_dax_region(struct device *parent, int region_id, 18a4574f63SDan Williams struct range *range, int target_node, unsigned int align, 19c2f3011eSDan Williams unsigned long flags); 20730926c3SDan Williams 21174ebeceSDan Williams struct dev_dax_data { 22174ebeceSDan Williams struct dax_region *dax_region; 23174ebeceSDan Williams struct dev_pagemap *pgmap; 24c2f3011eSDan Williams resource_size_t size; 25174ebeceSDan Williams int id; 26174ebeceSDan Williams }; 27730926c3SDan Williams 28174ebeceSDan Williams struct dev_dax *devm_create_dev_dax(struct dev_dax_data *data); 29730926c3SDan Williams 30*e9ee9fe3SDan Williams enum dax_driver_type { 31*e9ee9fe3SDan Williams DAXDRV_KMEM_TYPE, 32*e9ee9fe3SDan Williams DAXDRV_DEVICE_TYPE, 33*e9ee9fe3SDan Williams }; 34*e9ee9fe3SDan Williams 35d200781eSDan Williams struct dax_device_driver { 36d200781eSDan Williams struct device_driver drv; 37d200781eSDan Williams struct list_head ids; 38*e9ee9fe3SDan Williams enum dax_driver_type type; 39f11cf813SDan Williams int (*probe)(struct dev_dax *dev); 400d519e0dSUwe Kleine-König void (*remove)(struct dev_dax *dev); 41d200781eSDan Williams }; 42d200781eSDan Williams 43d200781eSDan Williams int __dax_driver_register(struct dax_device_driver *dax_drv, 449567da0bSDan Williams struct module *module, const char *mod_name); 459567da0bSDan Williams #define dax_driver_register(driver) \ 469567da0bSDan Williams __dax_driver_register(driver, THIS_MODULE, KBUILD_MODNAME) 47d200781eSDan Williams void dax_driver_unregister(struct dax_device_driver *dax_drv); 4851cf784cSDan Williams void kill_dev_dax(struct dev_dax *dev_dax); 49fc65c4ebSJoao Martins bool static_dev_dax(struct dev_dax *dev_dax); 509567da0bSDan Williams 519567da0bSDan Williams #define MODULE_ALIAS_DAX_DEVICE(type) \ 529567da0bSDan Williams MODULE_ALIAS("dax:t" __stringify(type) "*") 539567da0bSDan Williams #define DAX_DEVICE_MODALIAS_FMT "dax:t%d" 549567da0bSDan Williams 5551cf784cSDan Williams #endif /* __DAX_BUS_H__ */ 56