blob: fe3fcb99c69ce3308d68ad729da6081090a0496a [file] [log] [blame]
Ben Skeggsc33b1e82014-03-03 16:18:55 +10001#ifndef __NVKM_GRCTX_NVC0_H__
2#define __NVKM_GRCTX_NVC0_H__
3
4#include "nvc0.h"
5
6struct nvc0_grctx {
7 struct nvc0_graph_priv *priv;
8 struct nvc0_graph_data *data;
9 struct nvc0_graph_mmio *mmio;
10 int buffer_nr;
11 u64 buffer[4];
12 u64 addr;
13};
14
Ben Skeggs694c6ca2014-08-10 04:10:29 +100015int nvc0_grctx_mmio_data(struct nvc0_grctx *, u32 size, u32 align, u32 access);
16void nvc0_grctx_mmio_item(struct nvc0_grctx *, u32 addr, u32 data, int s, int);
17
18#define mmio_data(a,b,c) nvc0_grctx_mmio_data(info, (a), (b), (c))
19#define mmio_list(a,b,c,d) nvc0_grctx_mmio_item(info, (a), (b), (c), (d))
20
21#define mmio_vram(a,b,c,d) nvc0_grctx_mmio_data((a), (b), (c), (d))
22#define mmio_refn(a,b,c,d,e) nvc0_grctx_mmio_item((a), (b), (c), (d), (e))
23#define mmio_skip(a,b,c) mmio_refn((a), (b), (c), -1, -1)
24#define mmio_wr32(a,b,c) mmio_refn((a), (b), (c), 0, -1)
25
Ben Skeggsc33b1e82014-03-03 16:18:55 +100026struct nvc0_grctx_oclass {
27 struct nouveau_oclass base;
28 /* main context generation function */
29 void (*main)(struct nvc0_graph_priv *, struct nvc0_grctx *);
30 /* context-specific modify-on-first-load list generation function */
31 void (*mods)(struct nvc0_graph_priv *, struct nvc0_grctx *);
32 void (*unkn)(struct nvc0_graph_priv *);
33 /* mmio context data */
34 const struct nvc0_graph_pack *hub;
35 const struct nvc0_graph_pack *gpc;
36 const struct nvc0_graph_pack *zcull;
37 const struct nvc0_graph_pack *tpc;
38 const struct nvc0_graph_pack *ppc;
39 /* indirect context data, generated with icmds/mthds */
40 const struct nvc0_graph_pack *icmd;
41 const struct nvc0_graph_pack *mthd;
Ben Skeggsaa2d58c2014-08-10 04:10:29 +100042 /* bundle circular buffer */
43 void (*bundle)(struct nvc0_grctx *);
44 u32 bundle_size;
45 u32 bundle_min_gpm_fifo_depth;
46 u32 bundle_token_limit;
Ben Skeggsf331a152014-08-10 04:10:29 +100047 /* pagepool */
48 void (*pagepool)(struct nvc0_grctx *);
49 u32 pagepool_size;
Ben Skeggs67cfbfd2014-08-10 04:10:30 +100050 /* attribute(/alpha) circular buffer */
51 void (*attrib)(struct nvc0_grctx *);
52 u32 attrib_nr_max;
53 u32 attrib_nr;
54 u32 alpha_nr_max;
55 u32 alpha_nr;
Ben Skeggsc33b1e82014-03-03 16:18:55 +100056};
57
Ben Skeggsaa2d58c2014-08-10 04:10:29 +100058static inline const struct nvc0_grctx_oclass *
59nvc0_grctx_impl(struct nvc0_graph_priv *priv)
60{
61 return (void *)nv_engine(priv)->cclass;
62}
63
Ben Skeggsc33b1e82014-03-03 16:18:55 +100064extern struct nouveau_oclass *nvc0_grctx_oclass;
65int nvc0_grctx_generate(struct nvc0_graph_priv *);
66void nvc0_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *);
Ben Skeggsaa2d58c2014-08-10 04:10:29 +100067void nvc0_grctx_generate_bundle(struct nvc0_grctx *);
Ben Skeggsf331a152014-08-10 04:10:29 +100068void nvc0_grctx_generate_pagepool(struct nvc0_grctx *);
Ben Skeggs67cfbfd2014-08-10 04:10:30 +100069void nvc0_grctx_generate_attrib(struct nvc0_grctx *);
Ben Skeggsc33b1e82014-03-03 16:18:55 +100070void nvc0_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
71void nvc0_grctx_generate_unkn(struct nvc0_graph_priv *);
72void nvc0_grctx_generate_tpcid(struct nvc0_graph_priv *);
73void nvc0_grctx_generate_r406028(struct nvc0_graph_priv *);
74void nvc0_grctx_generate_r4060a8(struct nvc0_graph_priv *);
75void nvc0_grctx_generate_r418bb8(struct nvc0_graph_priv *);
76void nvc0_grctx_generate_r406800(struct nvc0_graph_priv *);
77
78extern struct nouveau_oclass *nvc1_grctx_oclass;
Ben Skeggs67cfbfd2014-08-10 04:10:30 +100079void nvc1_grctx_generate_attrib(struct nvc0_grctx *);
Ben Skeggsc33b1e82014-03-03 16:18:55 +100080void nvc1_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
81void nvc1_grctx_generate_unkn(struct nvc0_graph_priv *);
82
83extern struct nouveau_oclass *nvc4_grctx_oclass;
84extern struct nouveau_oclass *nvc8_grctx_oclass;
Ben Skeggs67cfbfd2014-08-10 04:10:30 +100085
Ben Skeggsc33b1e82014-03-03 16:18:55 +100086extern struct nouveau_oclass *nvd7_grctx_oclass;
Ben Skeggs67cfbfd2014-08-10 04:10:30 +100087void nvd7_grctx_generate_attrib(struct nvc0_grctx *);
88
Ben Skeggsc33b1e82014-03-03 16:18:55 +100089extern struct nouveau_oclass *nvd9_grctx_oclass;
90
91extern struct nouveau_oclass *nve4_grctx_oclass;
Alexandre Courbota4d4bbf2014-05-02 18:32:41 +090092extern struct nouveau_oclass *gk20a_grctx_oclass;
Ben Skeggsc33b1e82014-03-03 16:18:55 +100093void nve4_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *);
Ben Skeggsaa2d58c2014-08-10 04:10:29 +100094void nve4_grctx_generate_bundle(struct nvc0_grctx *);
Ben Skeggsf331a152014-08-10 04:10:29 +100095void nve4_grctx_generate_pagepool(struct nvc0_grctx *);
Alexandre Courbota4d4bbf2014-05-02 18:32:41 +090096void nve4_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
Ben Skeggsc33b1e82014-03-03 16:18:55 +100097void nve4_grctx_generate_unkn(struct nvc0_graph_priv *);
98void nve4_grctx_generate_r418bb8(struct nvc0_graph_priv *);
99
100extern struct nouveau_oclass *nvf0_grctx_oclass;
Ben Skeggs579b7f32014-06-12 21:22:32 +1000101extern struct nouveau_oclass *gk110b_grctx_oclass;
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000102extern struct nouveau_oclass *nv108_grctx_oclass;
Ben Skeggs6f1e9b92014-03-04 11:00:41 +1000103extern struct nouveau_oclass *gm107_grctx_oclass;
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000104
105/* context init value lists */
106
107extern const struct nvc0_graph_pack nvc0_grctx_pack_icmd[];
108
109extern const struct nvc0_graph_pack nvc0_grctx_pack_mthd[];
110extern const struct nvc0_graph_init nvc0_grctx_init_902d_0[];
111extern const struct nvc0_graph_init nvc0_grctx_init_9039_0[];
112extern const struct nvc0_graph_init nvc0_grctx_init_90c0_0[];
113
114extern const struct nvc0_graph_pack nvc0_grctx_pack_hub[];
115extern const struct nvc0_graph_init nvc0_grctx_init_main_0[];
116extern const struct nvc0_graph_init nvc0_grctx_init_fe_0[];
117extern const struct nvc0_graph_init nvc0_grctx_init_pri_0[];
118extern const struct nvc0_graph_init nvc0_grctx_init_memfmt_0[];
119extern const struct nvc0_graph_init nvc0_grctx_init_rstr2d_0[];
120extern const struct nvc0_graph_init nvc0_grctx_init_scc_0[];
121
122extern const struct nvc0_graph_pack nvc0_grctx_pack_gpc[];
Ben Skeggs97af71f2014-03-03 16:18:56 +1000123extern const struct nvc0_graph_init nvc0_grctx_init_gpc_unk_0[];
124extern const struct nvc0_graph_init nvc0_grctx_init_prop_0[];
125extern const struct nvc0_graph_init nvc0_grctx_init_gpc_unk_1[];
126extern const struct nvc0_graph_init nvc0_grctx_init_zcull_0[];
127extern const struct nvc0_graph_init nvc0_grctx_init_crstr_0[];
128extern const struct nvc0_graph_init nvc0_grctx_init_gpm_0[];
129extern const struct nvc0_graph_init nvc0_grctx_init_gcc_0[];
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000130
131extern const struct nvc0_graph_pack nvc0_grctx_pack_zcull[];
132
133extern const struct nvc0_graph_pack nvc0_grctx_pack_tpc[];
Ben Skeggs7e194532014-03-03 16:18:56 +1000134extern const struct nvc0_graph_init nvc0_grctx_init_pe_0[];
135extern const struct nvc0_graph_init nvc0_grctx_init_wwdx_0[];
136extern const struct nvc0_graph_init nvc0_grctx_init_mpc_0[];
137extern const struct nvc0_graph_init nvc0_grctx_init_tpccs_0[];
138
139extern const struct nvc0_graph_init nvc4_grctx_init_tex_0[];
140extern const struct nvc0_graph_init nvc4_grctx_init_l1c_0[];
141extern const struct nvc0_graph_init nvc4_grctx_init_sm_0[];
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000142
143extern const struct nvc0_graph_init nvc1_grctx_init_9097_0[];
144
Ben Skeggs97af71f2014-03-03 16:18:56 +1000145extern const struct nvc0_graph_init nvc1_grctx_init_gpm_0[];
146
Ben Skeggs7e194532014-03-03 16:18:56 +1000147extern const struct nvc0_graph_init nvc1_grctx_init_pe_0[];
148extern const struct nvc0_graph_init nvc1_grctx_init_wwdx_0[];
149extern const struct nvc0_graph_init nvc1_grctx_init_tpccs_0[];
150
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000151extern const struct nvc0_graph_init nvc8_grctx_init_9197_0[];
152extern const struct nvc0_graph_init nvc8_grctx_init_9297_0[];
153
154extern const struct nvc0_graph_pack nvd9_grctx_pack_icmd[];
155
156extern const struct nvc0_graph_pack nvd9_grctx_pack_mthd[];
157
158extern const struct nvc0_graph_init nvd9_grctx_init_fe_0[];
159extern const struct nvc0_graph_init nvd9_grctx_init_be_0[];
160
Ben Skeggs97af71f2014-03-03 16:18:56 +1000161extern const struct nvc0_graph_init nvd9_grctx_init_prop_0[];
162extern const struct nvc0_graph_init nvd9_grctx_init_gpc_unk_1[];
163extern const struct nvc0_graph_init nvd9_grctx_init_crstr_0[];
164
Ben Skeggs7e194532014-03-03 16:18:56 +1000165extern const struct nvc0_graph_init nvd9_grctx_init_sm_0[];
166
167extern const struct nvc0_graph_init nvd7_grctx_init_pe_0[];
168
Ben Skeggs88e98d42014-03-03 16:18:56 +1000169extern const struct nvc0_graph_init nvd7_grctx_init_wwdx_0[];
170
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000171extern const struct nvc0_graph_init nve4_grctx_init_memfmt_0[];
172extern const struct nvc0_graph_init nve4_grctx_init_ds_0[];
173extern const struct nvc0_graph_init nve4_grctx_init_scc_0[];
174
Ben Skeggs97af71f2014-03-03 16:18:56 +1000175extern const struct nvc0_graph_init nve4_grctx_init_gpm_0[];
176
Ben Skeggs88e98d42014-03-03 16:18:56 +1000177extern const struct nvc0_graph_init nve4_grctx_init_pes_0[];
178
Alexandre Courbota4d4bbf2014-05-02 18:32:41 +0900179extern const struct nvc0_graph_pack nve4_grctx_pack_hub[];
180extern const struct nvc0_graph_pack nve4_grctx_pack_gpc[];
181extern const struct nvc0_graph_pack nve4_grctx_pack_tpc[];
182extern const struct nvc0_graph_pack nve4_grctx_pack_ppc[];
183extern const struct nvc0_graph_pack nve4_grctx_pack_icmd[];
184extern const struct nvc0_graph_init nve4_grctx_init_a097_0[];
185
Ben Skeggs579b7f32014-06-12 21:22:32 +1000186extern const struct nvc0_graph_pack nvf0_grctx_pack_icmd[];
187
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000188extern const struct nvc0_graph_pack nvf0_grctx_pack_mthd[];
189
Ben Skeggs579b7f32014-06-12 21:22:32 +1000190extern const struct nvc0_graph_pack nvf0_grctx_pack_hub[];
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000191extern const struct nvc0_graph_init nvf0_grctx_init_pri_0[];
192extern const struct nvc0_graph_init nvf0_grctx_init_cwd_0[];
193
Ben Skeggs579b7f32014-06-12 21:22:32 +1000194extern const struct nvc0_graph_pack nvf0_grctx_pack_gpc[];
Ben Skeggs97af71f2014-03-03 16:18:56 +1000195extern const struct nvc0_graph_init nvf0_grctx_init_gpc_unk_2[];
196
Ben Skeggs579b7f32014-06-12 21:22:32 +1000197extern const struct nvc0_graph_init nvf0_grctx_init_tex_0[];
Ben Skeggs7e194532014-03-03 16:18:56 +1000198extern const struct nvc0_graph_init nvf0_grctx_init_mpc_0[];
199extern const struct nvc0_graph_init nvf0_grctx_init_l1c_0[];
200
Ben Skeggs579b7f32014-06-12 21:22:32 +1000201extern const struct nvc0_graph_pack nvf0_grctx_pack_ppc[];
202
Ben Skeggs6f1e9b92014-03-04 11:00:41 +1000203extern const struct nvc0_graph_init nv108_grctx_init_rstr2d_0[];
204
205extern const struct nvc0_graph_init nv108_grctx_init_prop_0[];
206extern const struct nvc0_graph_init nv108_grctx_init_crstr_0[];
207
Ben Skeggsc33b1e82014-03-03 16:18:55 +1000208
209#endif