1 /* 2 * Copyright(c) 2013-2015 Intel Corporation. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of version 2 of the GNU General Public License as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 */ 13 #ifndef __LINUX_ND_H__ 14 #define __LINUX_ND_H__ 15 #include <linux/ndctl.h> 16 #include <linux/device.h> 17 18 struct nd_device_driver { 19 struct device_driver drv; 20 unsigned long type; 21 int (*probe)(struct device *dev); 22 int (*remove)(struct device *dev); 23 }; 24 25 static inline struct nd_device_driver *to_nd_device_driver( 26 struct device_driver *drv) 27 { 28 return container_of(drv, struct nd_device_driver, drv); 29 }; 30 31 /** 32 * struct nd_namespace_io - infrastructure for loading an nd_pmem instance 33 * @dev: namespace device created by the nd region driver 34 * @res: struct resource conversion of a NFIT SPA table 35 */ 36 struct nd_namespace_io { 37 struct device dev; 38 struct resource res; 39 }; 40 41 /** 42 * struct nd_namespace_pmem - namespace device for dimm-backed interleaved memory 43 * @nsio: device and system physical address range to drive 44 * @alt_name: namespace name supplied in the dimm label 45 * @uuid: namespace name supplied in the dimm label 46 */ 47 struct nd_namespace_pmem { 48 struct nd_namespace_io nsio; 49 char *alt_name; 50 u8 *uuid; 51 }; 52 53 static inline struct nd_namespace_io *to_nd_namespace_io(struct device *dev) 54 { 55 return container_of(dev, struct nd_namespace_io, dev); 56 } 57 58 static inline struct nd_namespace_pmem *to_nd_namespace_pmem(struct device *dev) 59 { 60 struct nd_namespace_io *nsio = to_nd_namespace_io(dev); 61 62 return container_of(nsio, struct nd_namespace_pmem, nsio); 63 } 64 65 #define MODULE_ALIAS_ND_DEVICE(type) \ 66 MODULE_ALIAS("nd:t" __stringify(type) "*") 67 #define ND_DEVICE_MODALIAS_FMT "nd:t%d" 68 69 int __must_check __nd_driver_register(struct nd_device_driver *nd_drv, 70 struct module *module, const char *mod_name); 71 #define nd_driver_register(driver) \ 72 __nd_driver_register(driver, THIS_MODULE, KBUILD_MODNAME) 73 #endif /* __LINUX_ND_H__ */ 74