1 #ifndef __NVKM_GRCTX_NVC0_H__
2 #define __NVKM_GRCTX_NVC0_H__
7 struct nvc0_graph_priv *priv;
8 struct nvc0_graph_data *data;
9 struct nvc0_graph_mmio *mmio;
15 struct nvc0_grctx_oclass {
16 struct nouveau_oclass base;
17 /* main context generation function */
18 void (*main)(struct nvc0_graph_priv *, struct nvc0_grctx *);
19 /* context-specific modify-on-first-load list generation function */
20 void (*mods)(struct nvc0_graph_priv *, struct nvc0_grctx *);
21 void (*unkn)(struct nvc0_graph_priv *);
22 /* mmio context data */
23 const struct nvc0_graph_pack *hub;
24 const struct nvc0_graph_pack *gpc;
25 const struct nvc0_graph_pack *zcull;
26 const struct nvc0_graph_pack *tpc;
27 const struct nvc0_graph_pack *ppc;
28 /* indirect context data, generated with icmds/mthds */
29 const struct nvc0_graph_pack *icmd;
30 const struct nvc0_graph_pack *mthd;
33 #define mmio_data(s,a,p) do { \
34 info->buffer[info->buffer_nr] = round_up(info->addr, (a)); \
35 info->addr = info->buffer[info->buffer_nr++] + (s); \
36 info->data->size = (s); \
37 info->data->align = (a); \
38 info->data->access = (p); \
42 #define mmio_list(r,d,s,b) do { \
43 info->mmio->addr = (r); \
44 info->mmio->data = (d); \
45 info->mmio->shift = (s); \
46 info->mmio->buffer = (b); \
48 nv_wr32(priv, (r), (d) | ((s) ? (info->buffer[(b)] >> (s)) : 0)); \
51 extern struct nouveau_oclass *nvc0_grctx_oclass;
52 int nvc0_grctx_generate(struct nvc0_graph_priv *);
53 void nvc0_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *);
54 void nvc0_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
55 void nvc0_grctx_generate_unkn(struct nvc0_graph_priv *);
56 void nvc0_grctx_generate_tpcid(struct nvc0_graph_priv *);
57 void nvc0_grctx_generate_r406028(struct nvc0_graph_priv *);
58 void nvc0_grctx_generate_r4060a8(struct nvc0_graph_priv *);
59 void nvc0_grctx_generate_r418bb8(struct nvc0_graph_priv *);
60 void nvc0_grctx_generate_r406800(struct nvc0_graph_priv *);
62 extern struct nouveau_oclass *nvc1_grctx_oclass;
63 void nvc1_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
64 void nvc1_grctx_generate_unkn(struct nvc0_graph_priv *);
66 extern struct nouveau_oclass *nvc4_grctx_oclass;
67 extern struct nouveau_oclass *nvc8_grctx_oclass;
68 extern struct nouveau_oclass *nvd7_grctx_oclass;
69 extern struct nouveau_oclass *nvd9_grctx_oclass;
71 extern struct nouveau_oclass *nve4_grctx_oclass;
72 void nve4_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *);
73 void nve4_grctx_generate_unkn(struct nvc0_graph_priv *);
74 void nve4_grctx_generate_r418bb8(struct nvc0_graph_priv *);
76 extern struct nouveau_oclass *nvf0_grctx_oclass;
77 extern struct nouveau_oclass *nv108_grctx_oclass;
78 extern struct nouveau_oclass *gm107_grctx_oclass;
80 /* context init value lists */
82 extern const struct nvc0_graph_pack nvc0_grctx_pack_icmd[];
84 extern const struct nvc0_graph_pack nvc0_grctx_pack_mthd[];
85 extern const struct nvc0_graph_init nvc0_grctx_init_902d_0[];
86 extern const struct nvc0_graph_init nvc0_grctx_init_9039_0[];
87 extern const struct nvc0_graph_init nvc0_grctx_init_90c0_0[];
89 extern const struct nvc0_graph_pack nvc0_grctx_pack_hub[];
90 extern const struct nvc0_graph_init nvc0_grctx_init_main_0[];
91 extern const struct nvc0_graph_init nvc0_grctx_init_fe_0[];
92 extern const struct nvc0_graph_init nvc0_grctx_init_pri_0[];
93 extern const struct nvc0_graph_init nvc0_grctx_init_memfmt_0[];
94 extern const struct nvc0_graph_init nvc0_grctx_init_rstr2d_0[];
95 extern const struct nvc0_graph_init nvc0_grctx_init_scc_0[];
97 extern const struct nvc0_graph_pack nvc0_grctx_pack_gpc[];
98 extern const struct nvc0_graph_init nvc0_grctx_init_gpc_unk_0[];
99 extern const struct nvc0_graph_init nvc0_grctx_init_prop_0[];
100 extern const struct nvc0_graph_init nvc0_grctx_init_gpc_unk_1[];
101 extern const struct nvc0_graph_init nvc0_grctx_init_zcull_0[];
102 extern const struct nvc0_graph_init nvc0_grctx_init_crstr_0[];
103 extern const struct nvc0_graph_init nvc0_grctx_init_gpm_0[];
104 extern const struct nvc0_graph_init nvc0_grctx_init_gcc_0[];
106 extern const struct nvc0_graph_pack nvc0_grctx_pack_zcull[];
108 extern const struct nvc0_graph_pack nvc0_grctx_pack_tpc[];
109 extern const struct nvc0_graph_init nvc0_grctx_init_pe_0[];
110 extern const struct nvc0_graph_init nvc0_grctx_init_wwdx_0[];
111 extern const struct nvc0_graph_init nvc0_grctx_init_mpc_0[];
112 extern const struct nvc0_graph_init nvc0_grctx_init_tpccs_0[];
114 extern const struct nvc0_graph_init nvc4_grctx_init_tex_0[];
115 extern const struct nvc0_graph_init nvc4_grctx_init_l1c_0[];
116 extern const struct nvc0_graph_init nvc4_grctx_init_sm_0[];
118 extern const struct nvc0_graph_init nvc1_grctx_init_9097_0[];
120 extern const struct nvc0_graph_init nvc1_grctx_init_gpm_0[];
122 extern const struct nvc0_graph_init nvc1_grctx_init_pe_0[];
123 extern const struct nvc0_graph_init nvc1_grctx_init_wwdx_0[];
124 extern const struct nvc0_graph_init nvc1_grctx_init_tpccs_0[];
126 extern const struct nvc0_graph_init nvc8_grctx_init_9197_0[];
127 extern const struct nvc0_graph_init nvc8_grctx_init_9297_0[];
129 extern const struct nvc0_graph_pack nvd9_grctx_pack_icmd[];
131 extern const struct nvc0_graph_pack nvd9_grctx_pack_mthd[];
133 extern const struct nvc0_graph_init nvd9_grctx_init_fe_0[];
134 extern const struct nvc0_graph_init nvd9_grctx_init_be_0[];
136 extern const struct nvc0_graph_init nvd9_grctx_init_prop_0[];
137 extern const struct nvc0_graph_init nvd9_grctx_init_gpc_unk_1[];
138 extern const struct nvc0_graph_init nvd9_grctx_init_crstr_0[];
140 extern const struct nvc0_graph_init nvd9_grctx_init_sm_0[];
142 extern const struct nvc0_graph_init nvd7_grctx_init_pe_0[];
144 extern const struct nvc0_graph_init nvd7_grctx_init_wwdx_0[];
146 extern const struct nvc0_graph_init nve4_grctx_init_memfmt_0[];
147 extern const struct nvc0_graph_init nve4_grctx_init_ds_0[];
148 extern const struct nvc0_graph_init nve4_grctx_init_scc_0[];
150 extern const struct nvc0_graph_init nve4_grctx_init_gpm_0[];
152 extern const struct nvc0_graph_init nve4_grctx_init_pes_0[];
154 extern const struct nvc0_graph_pack nvf0_grctx_pack_mthd[];
156 extern const struct nvc0_graph_init nvf0_grctx_init_pri_0[];
157 extern const struct nvc0_graph_init nvf0_grctx_init_cwd_0[];
159 extern const struct nvc0_graph_init nvf0_grctx_init_gpc_unk_2[];
161 extern const struct nvc0_graph_init nvf0_grctx_init_mpc_0[];
162 extern const struct nvc0_graph_init nvf0_grctx_init_l1c_0[];
164 extern const struct nvc0_graph_init nv108_grctx_init_rstr2d_0[];
166 extern const struct nvc0_graph_init nv108_grctx_init_prop_0[];
167 extern const struct nvc0_graph_init nv108_grctx_init_crstr_0[];