Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
5025407b BS |
2 | #ifndef __NVKM_SUBDEV_H__ |
3 | #define __NVKM_SUBDEV_H__ | |
68f3f702 | 4 | #include <core/device.h> |
9274f4a9 | 5 | |
5025407b | 6 | struct nvkm_subdev { |
f0290215 | 7 | const struct nvkm_subdev_func *func; |
d351b856 | 8 | struct nvkm_device *device; |
68f3f702 | 9 | enum nvkm_devidx index; |
9274f4a9 | 10 | struct mutex mutex; |
9274f4a9 | 11 | u32 debug; |
f0290215 | 12 | |
68f3f702 | 13 | bool oneinit; |
f0290215 | 14 | }; |
9274f4a9 | 15 | |
f0290215 BS |
16 | struct nvkm_subdev_func { |
17 | void *(*dtor)(struct nvkm_subdev *); | |
18 | int (*preinit)(struct nvkm_subdev *); | |
19 | int (*oneinit)(struct nvkm_subdev *); | |
20 | int (*init)(struct nvkm_subdev *); | |
21 | int (*fini)(struct nvkm_subdev *, bool suspend); | |
5025407b | 22 | void (*intr)(struct nvkm_subdev *); |
9274f4a9 BS |
23 | }; |
24 | ||
68f3f702 | 25 | extern const char *nvkm_subdev_name[NVKM_SUBDEV_NR]; |
f0290215 | 26 | void nvkm_subdev_ctor(const struct nvkm_subdev_func *, struct nvkm_device *, |
56d06fa2 | 27 | int index, struct nvkm_subdev *); |
f0290215 BS |
28 | void nvkm_subdev_del(struct nvkm_subdev **); |
29 | int nvkm_subdev_preinit(struct nvkm_subdev *); | |
30 | int nvkm_subdev_init(struct nvkm_subdev *); | |
31 | int nvkm_subdev_fini(struct nvkm_subdev *, bool suspend); | |
32 | void nvkm_subdev_intr(struct nvkm_subdev *); | |
33 | ||
6594363b BS |
34 | /* subdev logging */ |
35 | #define nvkm_printk_(s,l,p,f,a...) do { \ | |
c1fcb148 | 36 | const struct nvkm_subdev *_subdev = (s); \ |
f0290215 BS |
37 | if (_subdev->debug >= (l)) { \ |
38 | dev_##p(_subdev->device->dev, "%s: "f, \ | |
39 | nvkm_subdev_name[_subdev->index], ##a); \ | |
40 | } \ | |
9274f4a9 | 41 | } while(0) |
6594363b BS |
42 | #define nvkm_printk(s,l,p,f,a...) nvkm_printk_((s), NV_DBG_##l, p, f, ##a) |
43 | #define nvkm_fatal(s,f,a...) nvkm_printk((s), FATAL, crit, f, ##a) | |
44 | #define nvkm_error(s,f,a...) nvkm_printk((s), ERROR, err, f, ##a) | |
45 | #define nvkm_warn(s,f,a...) nvkm_printk((s), WARN, notice, f, ##a) | |
46 | #define nvkm_info(s,f,a...) nvkm_printk((s), INFO, info, f, ##a) | |
47 | #define nvkm_debug(s,f,a...) nvkm_printk((s), DEBUG, info, f, ##a) | |
48 | #define nvkm_trace(s,f,a...) nvkm_printk((s), TRACE, info, f, ##a) | |
49 | #define nvkm_spam(s,f,a...) nvkm_printk((s), SPAM, dbg, f, ##a) | |
9274f4a9 | 50 | #endif |