14d88a97aSDan Williams /* 24d88a97aSDan Williams * Copyright(c) 2013-2015 Intel Corporation. All rights reserved. 34d88a97aSDan Williams * 44d88a97aSDan Williams * This program is free software; you can redistribute it and/or modify 54d88a97aSDan Williams * it under the terms of version 2 of the GNU General Public License as 64d88a97aSDan Williams * published by the Free Software Foundation. 74d88a97aSDan Williams * 84d88a97aSDan Williams * This program is distributed in the hope that it will be useful, but 94d88a97aSDan Williams * WITHOUT ANY WARRANTY; without even the implied warranty of 104d88a97aSDan Williams * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 114d88a97aSDan Williams * General Public License for more details. 124d88a97aSDan Williams */ 134d88a97aSDan Williams #ifndef __ND_H__ 144d88a97aSDan Williams #define __ND_H__ 151f7df6f8SDan Williams #include <linux/libnvdimm.h> 164d88a97aSDan Williams #include <linux/device.h> 174d88a97aSDan Williams #include <linux/mutex.h> 184d88a97aSDan Williams #include <linux/ndctl.h> 194d88a97aSDan Williams 204d88a97aSDan Williams struct nvdimm_drvdata { 214d88a97aSDan Williams struct device *dev; 224d88a97aSDan Williams struct nd_cmd_get_config_size nsarea; 234d88a97aSDan Williams void *data; 244d88a97aSDan Williams }; 254d88a97aSDan Williams 263d88002eSDan Williams struct nd_region_namespaces { 273d88002eSDan Williams int count; 283d88002eSDan Williams int active; 293d88002eSDan Williams }; 303d88002eSDan Williams 311f7df6f8SDan Williams struct nd_region { 321f7df6f8SDan Williams struct device dev; 331f7df6f8SDan Williams u16 ndr_mappings; 341f7df6f8SDan Williams u64 ndr_size; 351f7df6f8SDan Williams u64 ndr_start; 361f7df6f8SDan Williams int id; 371f7df6f8SDan Williams void *provider_data; 38*eaf96153SDan Williams struct nd_interleave_set *nd_set; 391f7df6f8SDan Williams struct nd_mapping mapping[0]; 401f7df6f8SDan Williams }; 411f7df6f8SDan Williams 424d88a97aSDan Williams enum nd_async_mode { 434d88a97aSDan Williams ND_SYNC, 444d88a97aSDan Williams ND_ASYNC, 454d88a97aSDan Williams }; 464d88a97aSDan Williams 474d88a97aSDan Williams void nd_device_register(struct device *dev); 484d88a97aSDan Williams void nd_device_unregister(struct device *dev, enum nd_async_mode mode); 494d88a97aSDan Williams int __init nvdimm_init(void); 503d88002eSDan Williams int __init nd_region_init(void); 514d88a97aSDan Williams void nvdimm_exit(void); 523d88002eSDan Williams void nd_region_exit(void); 534d88a97aSDan Williams int nvdimm_init_nsarea(struct nvdimm_drvdata *ndd); 544d88a97aSDan Williams int nvdimm_init_config_data(struct nvdimm_drvdata *ndd); 553d88002eSDan Williams struct nd_region *to_nd_region(struct device *dev); 563d88002eSDan Williams int nd_region_to_nstype(struct nd_region *nd_region); 573d88002eSDan Williams int nd_region_register_namespaces(struct nd_region *nd_region, int *err); 583d88002eSDan Williams void nvdimm_bus_lock(struct device *dev); 593d88002eSDan Williams void nvdimm_bus_unlock(struct device *dev); 603d88002eSDan Williams bool is_nvdimm_bus_locked(struct device *dev); 614d88a97aSDan Williams #endif /* __ND_H__ */ 62