nd-core.h 1.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*
 * Copyright(c) 2013-2015 Intel Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 */
#ifndef __ND_CORE_H__
#define __ND_CORE_H__
#include <linux/libnvdimm.h>
#include <linux/device.h>
17 18 19
#include <linux/libnvdimm.h>
#include <linux/sizes.h>
#include <linux/mutex.h>
20

21 22
extern struct list_head nvdimm_bus_list;
extern struct mutex nvdimm_bus_list_mutex;
23
extern int nvdimm_major;
24

25 26
struct nvdimm_bus {
	struct nvdimm_bus_descriptor *nd_desc;
27
	wait_queue_head_t probe_wait;
28
	struct module *module;
29
	struct list_head list;
30
	struct device dev;
31
	int id, probe_active;
32
	struct mutex reconfig_mutex;
33
};
34

35 36 37
struct nvdimm {
	unsigned long flags;
	void *provider_data;
38
	unsigned long *dsm_mask;
39
	struct device dev;
40
	atomic_t busy;
41 42 43
	int id;
};

44 45 46
bool is_nvdimm(struct device *dev);
bool is_nd_blk(struct device *dev);
bool is_nd_pmem(struct device *dev);
47
struct nvdimm_bus *walk_to_nvdimm_bus(struct device *nd_dev);
48
int __init nvdimm_bus_init(void);
49
void nvdimm_bus_exit(void);
50 51
void nd_region_probe_success(struct nvdimm_bus *nvdimm_bus, struct device *dev);
void nd_region_disable(struct nvdimm_bus *nvdimm_bus, struct device *dev);
52 53
int nvdimm_bus_create_ndctl(struct nvdimm_bus *nvdimm_bus);
void nvdimm_bus_destroy_ndctl(struct nvdimm_bus *nvdimm_bus);
54
void nd_synchronize(void);
55 56
int nvdimm_bus_register_dimms(struct nvdimm_bus *nvdimm_bus);
int nvdimm_bus_register_regions(struct nvdimm_bus *nvdimm_bus);
57
int nvdimm_bus_init_interleave_sets(struct nvdimm_bus *nvdimm_bus);
58
int nd_match_dimm(struct device *dev, void *data);
59
#endif /* __ND_CORE_H__ */