drm/nouveau/falcon: convert user classes to new-style nvkm_object
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / nouveau / include / nvkm / engine / falcon.h
1 #ifndef __NVKM_FALCON_H__
2 #define __NVKM_FALCON_H__
3 #define nvkm_falcon(p) container_of((p), struct nvkm_falcon, engine)
4 #include <core/engine.h>
5 struct nvkm_fifo_chan;
6
7 struct nvkm_falcon_data {
8         bool external;
9 };
10
11 struct nvkm_falcon {
12         struct nvkm_engine engine;
13         const struct nvkm_falcon_func *func;
14
15         u32 addr;
16         u8  version;
17         u8  secret;
18
19         struct nvkm_memory *core;
20         bool external;
21
22         struct {
23                 u32 limit;
24                 u32 *data;
25                 u32  size;
26         } code;
27
28         struct {
29                 u32 limit;
30                 u32 *data;
31                 u32  size;
32         } data;
33 };
34
35 struct nvkm_falcon_func {
36         void (*intr)(struct nvkm_falcon *, struct nvkm_fifo_chan *);
37         struct nvkm_sclass sclass[];
38 };
39
40 #define nv_falcon(priv) ((struct nvkm_falcon *)priv)
41
42 #define nvkm_falcon_create(a,p,e,c,b,d,i,f,r)                                 \
43         nvkm_falcon_create_((a), (p), (e), (c), (b), (d), (i), (f),              \
44                                sizeof(**r),(void **)r)
45 #define nvkm_falcon_destroy(p)                                              \
46         nvkm_engine_destroy(&(p)->engine)
47 #define nvkm_falcon_init(p) ({                                              \
48         struct nvkm_falcon *_falcon = (p);                                   \
49         _nvkm_falcon_init(nv_object(_falcon));                               \
50 })
51 #define nvkm_falcon_fini(p,s) ({                                            \
52         struct nvkm_falcon *_falcon = (p);                                   \
53         _nvkm_falcon_fini(nv_object(_falcon), (s));                          \
54 })
55
56 int nvkm_falcon_create_(const struct nvkm_falcon_func *,
57                         struct nvkm_object *, struct nvkm_object *,
58                         struct nvkm_oclass *, u32, bool, const char *,
59                         const char *, int, void **);
60 #define _nvkm_falcon_dtor _nvkm_engine_dtor
61 int  _nvkm_falcon_init(struct nvkm_object *);
62 int  _nvkm_falcon_fini(struct nvkm_object *, bool);
63 #endif