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 8struct 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 28struct nouveau_falcon_data { 29 bool external; 30}; 31 32struct 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 71int nouveau_falcon_create_(struct nouveau_object *, struct nouveau_object *, 72 struct nouveau_oclass *, u32, bool, const char *, 73 const char *, int, void **); 74 75void nouveau_falcon_intr(struct nouveau_subdev *subdev); 76 77#define _nouveau_falcon_dtor _nouveau_engine_dtor 78int _nouveau_falcon_init(struct nouveau_object *); 79int _nouveau_falcon_fini(struct nouveau_object *, bool); 80u32 _nouveau_falcon_rd32(struct nouveau_object *, u64); 81void _nouveau_falcon_wr32(struct nouveau_object *, u64, u32); 82 83#endif 84