HID: picolcd: sanity check report size in raw_event() callback
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / nouveau / core / engine / graph / ctxnvc0.h
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