1/*	$NetBSD: driver.h,v 1.6 2021/12/18 23:45:33 riastradh Exp $	*/
2
3/* SPDX-License-Identifier: MIT */
4#ifndef __NVIF_DRIVER_H__
5#define __NVIF_DRIVER_H__
6#include <nvif/os.h>
7struct nvif_client;
8
9#ifdef __NetBSD__
10#  define	__nvif_iomem	volatile
11#  define	__iomem		__nvif_iomem
12#endif
13
14struct nvif_driver {
15	const char *name;
16	int (*init)(const char *name, u64 device, const char *cfg,
17		    const char *dbg, void **priv);
18	void (*fini)(void *priv);
19	int (*suspend)(void *priv);
20	int (*resume)(void *priv);
21	int (*ioctl)(void *priv, bool super, void *data, u32 size, void **hack);
22#ifdef __NetBSD__
23	int (*map)(void *priv, bus_space_tag_t tag, u64 handle, u32 size,
24	    bus_space_handle_t *handlep, void __iomem **ptrp);
25	void (*unmap)(void *priv, bus_space_tag_t tag,
26	    bus_space_handle_t handle, bus_addr_t addr, void __iomem *ptr,
27	    u32 size);
28#else
29	void __iomem *(*map)(void *priv, u64 handle, u32 size);
30	void (*unmap)(void *priv, void __iomem *ptr, u32 size);
31#endif
32	bool keep;
33};
34
35#ifdef __NetBSD__
36#  undef	__iomem
37#endif
38int nvif_driver_init(const char *drv, const char *cfg, const char *dbg,
39		     const char *name, u64 device, struct nvif_client *);
40
41extern const struct nvif_driver nvif_driver_nvkm;
42extern const struct nvif_driver nvif_driver_drm;
43extern const struct nvif_driver nvif_driver_lib;
44extern const struct nvif_driver nvif_driver_null;
45#endif
46