]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - drivers/gpu/drm/nouveau/include/nvif/object.h
drm/nouveau/nvif: use negative oclass identifier for internal classes
[mirror_ubuntu-jammy-kernel.git] / drivers / gpu / drm / nouveau / include / nvif / object.h
1 #ifndef __NVIF_OBJECT_H__
2 #define __NVIF_OBJECT_H__
3
4 #include <nvif/os.h>
5
6 struct nvif_object {
7 struct nvif_client *client;
8 u32 handle;
9 s32 oclass;
10 void *priv; /*XXX: hack */
11 struct {
12 void __iomem *ptr;
13 u32 size;
14 } map;
15 };
16
17 int nvif_object_init(struct nvif_object *, u32 handle, s32 oclass, void *, u32,
18 struct nvif_object *);
19 void nvif_object_fini(struct nvif_object *);
20 int nvif_object_ioctl(struct nvif_object *, void *, u32, void **);
21 int nvif_object_sclass(struct nvif_object *, s32 *, int);
22 u32 nvif_object_rd(struct nvif_object *, int, u64);
23 void nvif_object_wr(struct nvif_object *, int, u64, u32);
24 int nvif_object_mthd(struct nvif_object *, u32, void *, u32);
25 int nvif_object_map(struct nvif_object *);
26 void nvif_object_unmap(struct nvif_object *);
27
28 #define nvif_handle(a) (unsigned long)(void *)(a)
29 #define nvif_object(a) (a)->object
30
31 #define nvif_rd(a,f,b,c) ({ \
32 struct nvif_object *_object = (a); \
33 u32 _data; \
34 if (likely(_object->map.ptr)) \
35 _data = f((u8 __iomem *)_object->map.ptr + (c)); \
36 else \
37 _data = nvif_object_rd(_object, (b), (c)); \
38 _data; \
39 })
40 #define nvif_wr(a,f,b,c,d) ({ \
41 struct nvif_object *_object = (a); \
42 if (likely(_object->map.ptr)) \
43 f((d), (u8 __iomem *)_object->map.ptr + (c)); \
44 else \
45 nvif_object_wr(_object, (b), (c), (d)); \
46 })
47 #define nvif_rd08(a,b) ({ ((u8)nvif_rd((a), ioread8, 1, (b))); })
48 #define nvif_rd16(a,b) ({ ((u16)nvif_rd((a), ioread16_native, 2, (b))); })
49 #define nvif_rd32(a,b) ({ ((u32)nvif_rd((a), ioread32_native, 4, (b))); })
50 #define nvif_wr08(a,b,c) nvif_wr((a), iowrite8, 1, (b), (u8)(c))
51 #define nvif_wr16(a,b,c) nvif_wr((a), iowrite16_native, 2, (b), (u16)(c))
52 #define nvif_wr32(a,b,c) nvif_wr((a), iowrite32_native, 4, (b), (u32)(c))
53 #define nvif_mask(a,b,c,d) ({ \
54 struct nvif_object *__object = (a); \
55 u32 _addr = (b), _data = nvif_rd32(__object, _addr); \
56 nvif_wr32(__object, _addr, (_data & ~(c)) | (d)); \
57 _data; \
58 })
59
60 #define nvif_mthd(a,b,c,d) nvif_object_mthd((a), (b), (c), (d))
61
62 /*XXX*/
63 #include <core/object.h>
64 #define nvxx_object(a) ({ \
65 struct nvif_object *_object = (a); \
66 (struct nvkm_object *)_object->priv; \
67 })
68 #endif