Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5564 serge 1
/*
2
 * Mesa 3-D graphics library
3
 *
4
 * Copyright (C) 2014 LunarG, Inc.
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a
7
 * copy of this software and associated documentation files (the "Software"),
8
 * to deal in the Software without restriction, including without limitation
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
 * and/or sell copies of the Software, and to permit persons to whom the
11
 * Software is furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included
14
 * in all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
 * DEALINGS IN THE SOFTWARE.
23
 */
24
 
25
#ifndef GENHW_H
26
#define GENHW_H
27
 
28
#include "pipe/p_compiler.h"
29
#include "util/u_debug.h"
30
 
31
#include "gen_regs.xml.h"
32
#include "gen_mi.xml.h"
33
#include "gen_blitter.xml.h"
34
#include "gen_render.xml.h"
35
#include "gen_render_surface.xml.h"
36
#include "gen_render_dynamic.xml.h"
37
#include "gen_render_3d.xml.h"
38
#include "gen_render_media.xml.h"
39
#include "gen_eu_isa.xml.h"
40
#include "gen_eu_message.xml.h"
41
 
42
#define GEN_MI_CMD(gen, op) (GEN6_MI_TYPE_MI | gen ## _MI_OPCODE_ ## op)
43
#define GEN6_MI_CMD(op) GEN_MI_CMD(GEN6, op)
44
#define GEN7_MI_CMD(op) GEN_MI_CMD(GEN7, op)
45
 
46
#define GEN_BLITTER_CMD(gen, op) \
47
   (GEN6_BLITTER_TYPE_BLITTER | gen ## _BLITTER_OPCODE_ ## op)
48
#define GEN6_BLITTER_CMD(op) GEN_BLITTER_CMD(GEN6, op)
49
 
50
#define GEN_RENDER_CMD(subtype, gen, op)  \
51
   (GEN6_RENDER_TYPE_RENDER |             \
52
    GEN6_RENDER_SUBTYPE_ ## subtype |     \
53
    gen ## _RENDER_OPCODE_ ## op)
54
#define GEN6_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN6, op)
55
#define GEN7_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN7, op)
56
#define GEN75_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN75, op)
57
#define GEN8_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN8, op)
58
 
59
#define GEN_EXTRACT(bits, field) (((bits) & field ## __MASK) >> field ## __SHIFT)
60
#define GEN_SHIFT32(bits, field) gen_shift32(bits, field ## __MASK, field ## __SHIFT)
61
 
62
static inline uint32_t
63
gen_shift32(uint32_t bits, uint32_t mask, int shift)
64
{
65
   bits <<= shift;
66
 
67
   assert((bits & mask) == bits);
68
   return bits & mask;
69
}
70
 
71
static inline bool
72
gen_is_snb(int devid)
73
{
74
   return (devid == 0x0102 || /* GT1 desktop */
75
           devid == 0x0112 || /* GT2 desktop */
76
           devid == 0x0122 || /* GT2_PLUS desktop */
77
           devid == 0x0106 || /* GT1 mobile */
78
           devid == 0x0116 || /* GT2 mobile */
79
           devid == 0x0126 || /* GT2_PLUS mobile */
80
           devid == 0x010a);  /* GT1 server */
81
}
82
 
83
static inline int
84
gen_get_snb_gt(int devid)
85
{
86
   assert(gen_is_snb(devid));
87
   return (devid & 0x30) ? 2 : 1;
88
}
89
 
90
static inline bool
91
gen_is_ivb(int devid)
92
{
93
   return (devid == 0x0152 || /* GT1 desktop */
94
           devid == 0x0162 || /* GT2 desktop */
95
           devid == 0x0156 || /* GT1 mobile */
96
           devid == 0x0166 || /* GT2 mobile */
97
           devid == 0x015a || /* GT1 server */
98
           devid == 0x016a);  /* GT2 server */
99
}
100
 
101
static inline int
102
gen_get_ivb_gt(int devid)
103
{
104
   assert(gen_is_ivb(devid));
105
   return (devid & 0x30) >> 4;
106
}
107
 
108
static inline bool
109
gen_is_hsw(int devid)
110
{
111
   return (devid == 0x0402 || /* GT1 desktop */
112
           devid == 0x0412 || /* GT2 desktop */
113
           devid == 0x0422 || /* GT3 desktop */
114
           devid == 0x0406 || /* GT1 mobile */
115
           devid == 0x0416 || /* GT2 mobile */
116
           devid == 0x0426 || /* GT2 mobile */
117
           devid == 0x040a || /* GT1 server */
118
           devid == 0x041a || /* GT2 server */
119
           devid == 0x042a || /* GT3 server */
120
           devid == 0x040b || /* GT1 reserved */
121
           devid == 0x041b || /* GT2 reserved */
122
           devid == 0x042b || /* GT3 reserved */
123
           devid == 0x040e || /* GT1 reserved */
124
           devid == 0x041e || /* GT2 reserved */
125
           devid == 0x042e || /* GT3 reserved */
126
           devid == 0x0c02 || /* SDV */
127
           devid == 0x0c12 ||
128
           devid == 0x0c22 ||
129
           devid == 0x0c06 ||
130
           devid == 0x0c16 ||
131
           devid == 0x0c26 ||
132
           devid == 0x0c0a ||
133
           devid == 0x0c1a ||
134
           devid == 0x0c2a ||
135
           devid == 0x0c0b ||
136
           devid == 0x0c1b ||
137
           devid == 0x0c2b ||
138
           devid == 0x0c0e ||
139
           devid == 0x0c1e ||
140
           devid == 0x0c2e ||
141
           devid == 0x0a02 || /* ULT */
142
           devid == 0x0a12 ||
143
           devid == 0x0a22 ||
144
           devid == 0x0a06 ||
145
           devid == 0x0a16 ||
146
           devid == 0x0a26 ||
147
           devid == 0x0a0a ||
148
           devid == 0x0a1a ||
149
           devid == 0x0a2a ||
150
           devid == 0x0a0b ||
151
           devid == 0x0a1b ||
152
           devid == 0x0a2b ||
153
           devid == 0x0a0e ||
154
           devid == 0x0a1e ||
155
           devid == 0x0a2e ||
156
           devid == 0x0d02 || /* CRW */
157
           devid == 0x0d12 ||
158
           devid == 0x0d22 ||
159
           devid == 0x0d06 ||
160
           devid == 0x0d16 ||
161
           devid == 0x0d26 ||
162
           devid == 0x0d0a ||
163
           devid == 0x0d1a ||
164
           devid == 0x0d2a ||
165
           devid == 0x0d0b ||
166
           devid == 0x0d1b ||
167
           devid == 0x0d2b ||
168
           devid == 0x0d0e ||
169
           devid == 0x0d1e ||
170
           devid == 0x0d2e);
171
}
172
 
173
static inline int
174
gen_get_hsw_gt(int devid)
175
{
176
   assert(gen_is_hsw(devid));
177
   return ((devid & 0x30) >> 4) + 1;
178
}
179
 
180
static inline bool
181
gen_is_bdw(int devid)
182
{
183
   return (devid == 0x1602 || /* GT1 ULT */
184
           devid == 0x1606 || /* GT1 ULT */
185
           devid == 0x160a || /* GT1 server */
186
           devid == 0x160b || /* GT1 Iris */
187
           devid == 0x160d || /* GT1 workstation */
188
           devid == 0x160e || /* GT1 ULX */
189
           devid == 0x1612 || /* GT2 */
190
           devid == 0x1616 ||
191
           devid == 0x161a ||
192
           devid == 0x161b ||
193
           devid == 0x161d ||
194
           devid == 0x161e ||
195
           devid == 0x1622 || /* GT3 */
196
           devid == 0x1626 ||
197
           devid == 0x162a ||
198
           devid == 0x162b ||
199
           devid == 0x162d ||
200
           devid == 0x162e);
201
}
202
 
203
static inline int
204
gen_get_bdw_gt(int devid)
205
{
206
   assert(gen_is_bdw(devid));
207
   return ((devid & 0x30) >> 4) + 1;
208
}
209
 
210
static inline bool
211
gen_is_vlv(int devid)
212
{
213
   return (devid == 0x0f30 ||
214
           devid == 0x0f31 ||
215
           devid == 0x0f32 ||
216
           devid == 0x0f33 ||
217
           devid == 0x0157 ||
218
           devid == 0x0155);
219
}
220
 
221
static inline bool
222
gen_is_chv(int devid)
223
{
224
   return (devid == 0x22b0 ||
225
           devid == 0x22b1 ||
226
           devid == 0x22b2 ||
227
           devid == 0x22b3);
228
}
229
 
230
static inline bool
231
gen_is_atom(int devid)
232
{
233
   return (gen_is_vlv(devid) ||
234
           gen_is_chv(devid));
235
}
236
 
237
static inline bool
238
gen_is_desktop(int devid)
239
{
240
   assert(!gen_is_atom(devid));
241
   return ((devid & 0xf) == 0x2);
242
}
243
 
244
static inline bool
245
gen_is_mobile(int devid)
246
{
247
   assert(!gen_is_atom(devid));
248
   return ((devid & 0xf) == 0x6);
249
}
250
 
251
static inline bool
252
gen_is_server(int devid)
253
{
254
   assert(!gen_is_atom(devid));
255
   return ((devid & 0xf) == 0xa);
256
}
257
 
258
#endif /* GENHW_H */