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 *
nvkm_bar(void * obj)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