1 #ifndef __NVKM_BAR_H__
2 #define __NVKM_BAR_H__
3 #include <core/subdev.h>
4 struct nvkm_mem;
5 struct nvkm_vma;
6 
7 struct nvkm_bar {
8 	struct nvkm_subdev base;
9 
10 	int  (*alloc)(struct nvkm_bar *, struct nvkm_object *,
11 		      struct nvkm_mem *, struct nvkm_object **);
12 
13 	int  (*kmap)(struct nvkm_bar *, struct nvkm_mem *, u32 flags,
14 		     struct nvkm_vma *);
15 	int  (*umap)(struct nvkm_bar *, struct nvkm_mem *, u32 flags,
16 		     struct nvkm_vma *);
17 	void (*unmap)(struct nvkm_bar *, struct nvkm_vma *);
18 	void (*flush)(struct nvkm_bar *);
19 
20 	/* whether the BAR supports to be ioremapped WC or should be uncached */
21 	bool iomap_uncached;
22 };
23 
24 static inline struct nvkm_bar *
25 nvkm_bar(void *obj)
26 {
27 	return (void *)nvkm_subdev(obj, NVDEV_SUBDEV_BAR);
28 }
29 
30 extern struct nvkm_oclass nv50_bar_oclass;
31 extern struct nvkm_oclass gf100_bar_oclass;
32 extern struct nvkm_oclass gk20a_bar_oclass;
33 #endif
34