1 #ifndef __NOUVEAU_FALCON_H__ 2 #define __NOUVEAU_FALCON_H__ 3 4 #include <core/engine.h> 5 #include <core/engctx.h> 6 #include <core/gpuobj.h> 7 8 struct nouveau_falcon_chan { 9 struct nouveau_engctx base; 10 }; 11 12 #define nouveau_falcon_context_create(p,e,c,g,s,a,f,d) \ 13 nouveau_engctx_create((p), (e), (c), (g), (s), (a), (f), (d)) 14 #define nouveau_falcon_context_destroy(d) \ 15 nouveau_engctx_destroy(&(d)->base) 16 #define nouveau_falcon_context_init(d) \ 17 nouveau_engctx_init(&(d)->base) 18 #define nouveau_falcon_context_fini(d,s) \ 19 nouveau_engctx_fini(&(d)->base, (s)) 20 21 #define _nouveau_falcon_context_ctor _nouveau_engctx_ctor 22 #define _nouveau_falcon_context_dtor _nouveau_engctx_dtor 23 #define _nouveau_falcon_context_init _nouveau_engctx_init 24 #define _nouveau_falcon_context_fini _nouveau_engctx_fini 25 #define _nouveau_falcon_context_rd32 _nouveau_engctx_rd32 26 #define _nouveau_falcon_context_wr32 _nouveau_engctx_wr32 27 28 struct nouveau_falcon_data { 29 bool external; 30 }; 31 32 struct nouveau_falcon { 33 struct nouveau_engine base; 34 35 u32 addr; 36 u8 version; 37 u8 secret; 38 39 struct nouveau_gpuobj *core; 40 bool external; 41 42 struct { 43 u32 limit; 44 u32 *data; 45 u32 size; 46 } code; 47 48 struct { 49 u32 limit; 50 u32 *data; 51 u32 size; 52 } data; 53 }; 54 55 #define nv_falcon(priv) (&(priv)->base) 56 57 #define nouveau_falcon_create(p,e,c,b,d,i,f,r) \ 58 nouveau_falcon_create_((p), (e), (c), (b), (d), (i), (f), \ 59 sizeof(**r),(void **)r) 60 #define nouveau_falcon_destroy(p) \ 61 nouveau_engine_destroy(&(p)->base) 62 #define nouveau_falcon_init(p) ({ \ 63 struct nouveau_falcon *falcon = (p); \ 64 _nouveau_falcon_init(nv_object(falcon)); \ 65 }) 66 #define nouveau_falcon_fini(p,s) ({ \ 67 struct nouveau_falcon *falcon = (p); \ 68 _nouveau_falcon_fini(nv_object(falcon), (s)); \ 69 }) 70 71 int nouveau_falcon_create_(struct nouveau_object *, struct nouveau_object *, 72 struct nouveau_oclass *, u32, bool, const char *, 73 const char *, int, void **); 74 75 void nouveau_falcon_intr(struct nouveau_subdev *subdev); 76 77 #define _nouveau_falcon_dtor _nouveau_engine_dtor 78 int _nouveau_falcon_init(struct nouveau_object *); 79 int _nouveau_falcon_fini(struct nouveau_object *, bool); 80 u32 _nouveau_falcon_rd32(struct nouveau_object *, u64); 81 void _nouveau_falcon_wr32(struct nouveau_object *, u64, u32); 82 83 #endif 84