1 | #ifndef __NOUVEAU_CLIENT_H__ |
2 | #define __NOUVEAU_CLIENT_H__ |
3 | |
4 | #include <core/namedb.h> |
5 | |
6 | struct nouveau_client { |
7 | struct nouveau_namedb base; |
8 | struct nouveau_handle *root; |
9 | struct nouveau_object *device; |
10 | char name[32]; |
11 | u32 debug; |
12 | struct nouveau_vm *vm; |
13 | }; |
14 | |
15 | static inline struct nouveau_client * |
16 | nv_client(void *obj) |
17 | { |
18 | #if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA |
19 | if (unlikely(!nv_iclass(obj, NV_CLIENT_CLASS))) |
20 | nv_assert("BAD CAST -> NvClient, %08x" , nv_hclass(obj)); |
21 | #endif |
22 | return obj; |
23 | } |
24 | |
25 | static inline struct nouveau_client * |
26 | nouveau_client(void *obj) |
27 | { |
28 | struct nouveau_object *client = nv_object(obj); |
29 | while (client && !(nv_iclass(client, NV_CLIENT_CLASS))) |
30 | client = client->parent; |
31 | return (void *)client; |
32 | } |
33 | |
34 | #define nouveau_client_create(n,c,oc,od,d) \ |
35 | nouveau_client_create_((n), (c), (oc), (od), sizeof(**d), (void **)d) |
36 | |
37 | int nouveau_client_create_(const char *name, u64 device, const char *cfg, |
38 | const char *dbg, int, void **); |
39 | #define nouveau_client_destroy(p) \ |
40 | nouveau_namedb_destroy(&(p)->base) |
41 | |
42 | int nouveau_client_init(struct nouveau_client *); |
43 | int nouveau_client_fini(struct nouveau_client *, bool suspend); |
44 | const char *nouveau_client_name(void *obj); |
45 | |
46 | #endif |
47 | |