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 {
8 	const struct nvkm_falcon_func *func;
9 	struct nvkm_engine engine;
10 
11 	u32 addr;
12 	u8  version;
13 	u8  secret;
14 
15 	struct nvkm_memory *core;
16 	bool external;
17 
18 	struct {
19 		u32 limit;
20 		u32 *data;
21 		u32  size;
22 	} code;
23 
24 	struct {
25 		u32 limit;
26 		u32 *data;
27 		u32  size;
28 	} data;
29 };
30 
31 int nvkm_falcon_new_(const struct nvkm_falcon_func *, struct nvkm_device *,
32 		     int index, bool enable, u32 addr, struct nvkm_engine **);
33 
34 struct nvkm_falcon_func {
35 	struct {
36 		u32 *data;
37 		u32  size;
38 	} code;
39 	struct {
40 		u32 *data;
41 		u32  size;
42 	} data;
43 	void (*init)(struct nvkm_falcon *);
44 	void (*intr)(struct nvkm_falcon *, struct nvkm_fifo_chan *);
45 	struct nvkm_sclass sclass[];
46 };
47 #endif
48