1 | #ifndef __NVKM_GRCTX_NVC0_H__ |
2 | #define __NVKM_GRCTX_NVC0_H__ |
3 | |
4 | #include "nvc0.h" |
5 | |
6 | struct 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 | |
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; |
31 | }; |
32 | |
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); \ |
39 | info->data++; \ |
40 | } while(0) |
41 | |
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); \ |
47 | info->mmio++; \ |
48 | nv_wr32(priv, (r), (d) | ((s) ? (info->buffer[(b)] >> (s)) : 0)); \ |
49 | } while(0) |
50 | |
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 *); |
61 | |
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 *); |
65 | |
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; |
70 | |
71 | extern struct nouveau_oclass *nve4_grctx_oclass; |
72 | extern struct nouveau_oclass *gk20a_grctx_oclass; |
73 | void nve4_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *); |
74 | void nve4_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *); |
75 | void nve4_grctx_generate_unkn(struct nvc0_graph_priv *); |
76 | void nve4_grctx_generate_r418bb8(struct nvc0_graph_priv *); |
77 | |
78 | extern struct nouveau_oclass *nvf0_grctx_oclass; |
79 | extern struct nouveau_oclass *nv108_grctx_oclass; |
80 | extern struct nouveau_oclass *gm107_grctx_oclass; |
81 | |
82 | /* context init value lists */ |
83 | |
84 | extern const struct nvc0_graph_pack nvc0_grctx_pack_icmd[]; |
85 | |
86 | extern const struct nvc0_graph_pack nvc0_grctx_pack_mthd[]; |
87 | extern const struct nvc0_graph_init nvc0_grctx_init_902d_0[]; |
88 | extern const struct nvc0_graph_init nvc0_grctx_init_9039_0[]; |
89 | extern const struct nvc0_graph_init nvc0_grctx_init_90c0_0[]; |
90 | |
91 | extern const struct nvc0_graph_pack nvc0_grctx_pack_hub[]; |
92 | extern const struct nvc0_graph_init nvc0_grctx_init_main_0[]; |
93 | extern const struct nvc0_graph_init nvc0_grctx_init_fe_0[]; |
94 | extern const struct nvc0_graph_init nvc0_grctx_init_pri_0[]; |
95 | extern const struct nvc0_graph_init nvc0_grctx_init_memfmt_0[]; |
96 | extern const struct nvc0_graph_init nvc0_grctx_init_rstr2d_0[]; |
97 | extern const struct nvc0_graph_init nvc0_grctx_init_scc_0[]; |
98 | |
99 | extern const struct nvc0_graph_pack nvc0_grctx_pack_gpc[]; |
100 | extern const struct nvc0_graph_init nvc0_grctx_init_gpc_unk_0[]; |
101 | extern const struct nvc0_graph_init nvc0_grctx_init_prop_0[]; |
102 | extern const struct nvc0_graph_init nvc0_grctx_init_gpc_unk_1[]; |
103 | extern const struct nvc0_graph_init nvc0_grctx_init_zcull_0[]; |
104 | extern const struct nvc0_graph_init nvc0_grctx_init_crstr_0[]; |
105 | extern const struct nvc0_graph_init nvc0_grctx_init_gpm_0[]; |
106 | extern const struct nvc0_graph_init nvc0_grctx_init_gcc_0[]; |
107 | |
108 | extern const struct nvc0_graph_pack nvc0_grctx_pack_zcull[]; |
109 | |
110 | extern const struct nvc0_graph_pack nvc0_grctx_pack_tpc[]; |
111 | extern const struct nvc0_graph_init nvc0_grctx_init_pe_0[]; |
112 | extern const struct nvc0_graph_init nvc0_grctx_init_wwdx_0[]; |
113 | extern const struct nvc0_graph_init nvc0_grctx_init_mpc_0[]; |
114 | extern const struct nvc0_graph_init nvc0_grctx_init_tpccs_0[]; |
115 | |
116 | extern const struct nvc0_graph_init nvc4_grctx_init_tex_0[]; |
117 | extern const struct nvc0_graph_init nvc4_grctx_init_l1c_0[]; |
118 | extern const struct nvc0_graph_init nvc4_grctx_init_sm_0[]; |
119 | |
120 | extern const struct nvc0_graph_init nvc1_grctx_init_9097_0[]; |
121 | |
122 | extern const struct nvc0_graph_init nvc1_grctx_init_gpm_0[]; |
123 | |
124 | extern const struct nvc0_graph_init nvc1_grctx_init_pe_0[]; |
125 | extern const struct nvc0_graph_init nvc1_grctx_init_wwdx_0[]; |
126 | extern const struct nvc0_graph_init nvc1_grctx_init_tpccs_0[]; |
127 | |
128 | extern const struct nvc0_graph_init nvc8_grctx_init_9197_0[]; |
129 | extern const struct nvc0_graph_init nvc8_grctx_init_9297_0[]; |
130 | |
131 | extern const struct nvc0_graph_pack nvd9_grctx_pack_icmd[]; |
132 | |
133 | extern const struct nvc0_graph_pack nvd9_grctx_pack_mthd[]; |
134 | |
135 | extern const struct nvc0_graph_init nvd9_grctx_init_fe_0[]; |
136 | extern const struct nvc0_graph_init nvd9_grctx_init_be_0[]; |
137 | |
138 | extern const struct nvc0_graph_init nvd9_grctx_init_prop_0[]; |
139 | extern const struct nvc0_graph_init nvd9_grctx_init_gpc_unk_1[]; |
140 | extern const struct nvc0_graph_init nvd9_grctx_init_crstr_0[]; |
141 | |
142 | extern const struct nvc0_graph_init nvd9_grctx_init_sm_0[]; |
143 | |
144 | extern const struct nvc0_graph_init nvd7_grctx_init_pe_0[]; |
145 | |
146 | extern const struct nvc0_graph_init nvd7_grctx_init_wwdx_0[]; |
147 | |
148 | extern const struct nvc0_graph_init nve4_grctx_init_memfmt_0[]; |
149 | extern const struct nvc0_graph_init nve4_grctx_init_ds_0[]; |
150 | extern const struct nvc0_graph_init nve4_grctx_init_scc_0[]; |
151 | |
152 | extern const struct nvc0_graph_init nve4_grctx_init_gpm_0[]; |
153 | |
154 | extern const struct nvc0_graph_init nve4_grctx_init_pes_0[]; |
155 | |
156 | extern const struct nvc0_graph_pack nve4_grctx_pack_hub[]; |
157 | extern const struct nvc0_graph_pack nve4_grctx_pack_gpc[]; |
158 | extern const struct nvc0_graph_pack nve4_grctx_pack_tpc[]; |
159 | extern const struct nvc0_graph_pack nve4_grctx_pack_ppc[]; |
160 | extern const struct nvc0_graph_pack nve4_grctx_pack_icmd[]; |
161 | extern const struct nvc0_graph_init nve4_grctx_init_a097_0[]; |
162 | |
163 | extern const struct nvc0_graph_pack nvf0_grctx_pack_mthd[]; |
164 | |
165 | extern const struct nvc0_graph_init nvf0_grctx_init_pri_0[]; |
166 | extern const struct nvc0_graph_init nvf0_grctx_init_cwd_0[]; |
167 | |
168 | extern const struct nvc0_graph_init nvf0_grctx_init_gpc_unk_2[]; |
169 | |
170 | extern const struct nvc0_graph_init nvf0_grctx_init_mpc_0[]; |
171 | extern const struct nvc0_graph_init nvf0_grctx_init_l1c_0[]; |
172 | |
173 | extern const struct nvc0_graph_init nv108_grctx_init_rstr2d_0[]; |
174 | |
175 | extern const struct nvc0_graph_init nv108_grctx_init_prop_0[]; |
176 | extern const struct nvc0_graph_init nv108_grctx_init_crstr_0[]; |
177 | |
178 | |
179 | #endif |
180 | |