~ubuntu-branches/ubuntu/gutsy/vnc4/gutsy

« back to all changes in this revision

Viewing changes to unix/xc/programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/mga_drm.h

  • Committer: Bazaar Package Importer
  • Author(s): Ola Lundqvist
  • Date: 2006-05-15 20:35:17 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060515203517-l4lre1ku942mn26k
Tags: 4.1.1+X4.3.0-10
* Correction of critical security issue. Thanks to Martin Kogler
  <e9925248@student.tuwien.ac.at> that informed me about the issue,
  and provided the patch.
  This flaw was originally found by Steve Wiseman of intelliadmin.com.
* Applied patch from Javier Kohen <jkohen@users.sourceforge.net> that
  inform the user that only 8 first characters of the password will
  actually be used when typing more than 8 characters, closes:
  #355619.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* mga_drm.h -- Public header for the Matrox g200/g400 driver -*- linux-c -*-
 
2
 * Created: Tue Jan 25 01:50:01 1999 by jhartmann@precisioninsight.com
 
3
 *
 
4
 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
 
5
 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
 
6
 * All rights reserved.
 
7
 *
 
8
 * Permission is hereby granted, free of charge, to any person obtaining a
 
9
 * copy of this software and associated documentation files (the "Software"),
 
10
 * to deal in the Software without restriction, including without limitation
 
11
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
12
 * and/or sell copies of the Software, and to permit persons to whom the
 
13
 * Software is furnished to do so, subject to the following conditions:
 
14
 *
 
15
 * The above copyright notice and this permission notice (including the next
 
16
 * paragraph) shall be included in all copies or substantial portions of the
 
17
 * Software.
 
18
 *
 
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
20
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
21
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 
22
 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 
23
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 
24
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 
25
 * OTHER DEALINGS IN THE SOFTWARE.
 
26
 *
 
27
 * Authors:
 
28
 *    Jeff Hartmann <jhartmann@valinux.com>
 
29
 *    Keith Whitwell <keith@tungstengraphics.com>
 
30
 *
 
31
 * Rewritten by:
 
32
 *    Gareth Hughes <gareth@valinux.com>
 
33
 */
 
34
 
 
35
#ifndef __MGA_DRM_H__
 
36
#define __MGA_DRM_H__
 
37
 
 
38
/* WARNING: If you change any of these defines, make sure to change the
 
39
 * defines in the Xserver file (mga_sarea.h)
 
40
 */
 
41
 
 
42
#ifndef __MGA_SAREA_DEFINES__
 
43
#define __MGA_SAREA_DEFINES__
 
44
 
 
45
/* WARP pipe flags
 
46
 */
 
47
#define MGA_F                   0x1             /* fog */
 
48
#define MGA_A                   0x2             /* alpha */
 
49
#define MGA_S                   0x4             /* specular */
 
50
#define MGA_T2                  0x8             /* multitexture */
 
51
 
 
52
#define MGA_WARP_TGZ            0
 
53
#define MGA_WARP_TGZF           (MGA_F)
 
54
#define MGA_WARP_TGZA           (MGA_A)
 
55
#define MGA_WARP_TGZAF          (MGA_F|MGA_A)
 
56
#define MGA_WARP_TGZS           (MGA_S)
 
57
#define MGA_WARP_TGZSF          (MGA_S|MGA_F)
 
58
#define MGA_WARP_TGZSA          (MGA_S|MGA_A)
 
59
#define MGA_WARP_TGZSAF         (MGA_S|MGA_F|MGA_A)
 
60
#define MGA_WARP_T2GZ           (MGA_T2)
 
61
#define MGA_WARP_T2GZF          (MGA_T2|MGA_F)
 
62
#define MGA_WARP_T2GZA          (MGA_T2|MGA_A)
 
63
#define MGA_WARP_T2GZAF         (MGA_T2|MGA_A|MGA_F)
 
64
#define MGA_WARP_T2GZS          (MGA_T2|MGA_S)
 
65
#define MGA_WARP_T2GZSF         (MGA_T2|MGA_S|MGA_F)
 
66
#define MGA_WARP_T2GZSA         (MGA_T2|MGA_S|MGA_A)
 
67
#define MGA_WARP_T2GZSAF        (MGA_T2|MGA_S|MGA_F|MGA_A)
 
68
 
 
69
#define MGA_MAX_G200_PIPES      8               /* no multitex */
 
70
#define MGA_MAX_G400_PIPES      16
 
71
#define MGA_MAX_WARP_PIPES      MGA_MAX_G400_PIPES
 
72
#define MGA_WARP_UCODE_SIZE     32768           /* in bytes */
 
73
 
 
74
#define MGA_CARD_TYPE_G200      1
 
75
#define MGA_CARD_TYPE_G400      2
 
76
 
 
77
 
 
78
#define MGA_FRONT               0x1
 
79
#define MGA_BACK                0x2
 
80
#define MGA_DEPTH               0x4
 
81
 
 
82
/* What needs to be changed for the current vertex dma buffer?
 
83
 */
 
84
#define MGA_UPLOAD_CONTEXT      0x1
 
85
#define MGA_UPLOAD_TEX0         0x2
 
86
#define MGA_UPLOAD_TEX1         0x4
 
87
#define MGA_UPLOAD_PIPE         0x8
 
88
#define MGA_UPLOAD_TEX0IMAGE    0x10 /* handled client-side */
 
89
#define MGA_UPLOAD_TEX1IMAGE    0x20 /* handled client-side */
 
90
#define MGA_UPLOAD_2D           0x40
 
91
#define MGA_WAIT_AGE            0x80 /* handled client-side */
 
92
#define MGA_UPLOAD_CLIPRECTS    0x100 /* handled client-side */
 
93
#if 0
 
94
#define MGA_DMA_FLUSH           0x200 /* set when someone gets the lock
 
95
                                         quiescent */
 
96
#endif
 
97
 
 
98
/* 32 buffers of 64k each, total 2 meg.
 
99
 */
 
100
#define MGA_BUFFER_SIZE         (1 << 16)
 
101
#define MGA_NUM_BUFFERS         128
 
102
 
 
103
/* Keep these small for testing.
 
104
 */
 
105
#define MGA_NR_SAREA_CLIPRECTS  8
 
106
 
 
107
/* 2 heaps (1 for card, 1 for agp), each divided into upto 128
 
108
 * regions, subject to a minimum region size of (1<<16) == 64k.
 
109
 *
 
110
 * Clients may subdivide regions internally, but when sharing between
 
111
 * clients, the region size is the minimum granularity.
 
112
 */
 
113
 
 
114
#define MGA_CARD_HEAP                   0
 
115
#define MGA_AGP_HEAP                    1
 
116
#define MGA_NR_TEX_HEAPS                2
 
117
#define MGA_NR_TEX_REGIONS              16
 
118
#define MGA_LOG_MIN_TEX_REGION_SIZE     16
 
119
 
 
120
#endif /* __MGA_SAREA_DEFINES__ */
 
121
 
 
122
 
 
123
/* Setup registers for 3D context
 
124
 */
 
125
typedef struct {
 
126
        unsigned int dstorg;
 
127
        unsigned int maccess;
 
128
        unsigned int plnwt;
 
129
        unsigned int dwgctl;
 
130
        unsigned int alphactrl;
 
131
        unsigned int fogcolor;
 
132
        unsigned int wflag;
 
133
        unsigned int tdualstage0;
 
134
        unsigned int tdualstage1;
 
135
        unsigned int fcol;
 
136
        unsigned int stencil;
 
137
        unsigned int stencilctl;
 
138
} drm_mga_context_regs_t;
 
139
 
 
140
/* Setup registers for 2D, X server
 
141
 */
 
142
typedef struct {
 
143
        unsigned int pitch;
 
144
} drm_mga_server_regs_t;
 
145
 
 
146
/* Setup registers for each texture unit
 
147
 */
 
148
typedef struct {
 
149
        unsigned int texctl;
 
150
        unsigned int texctl2;
 
151
        unsigned int texfilter;
 
152
        unsigned int texbordercol;
 
153
        unsigned int texorg;
 
154
        unsigned int texwidth;
 
155
        unsigned int texheight;
 
156
        unsigned int texorg1;
 
157
        unsigned int texorg2;
 
158
        unsigned int texorg3;
 
159
        unsigned int texorg4;
 
160
} drm_mga_texture_regs_t;
 
161
 
 
162
/* General aging mechanism
 
163
 */
 
164
typedef struct {
 
165
        unsigned int head;              /* Position of head pointer          */
 
166
        unsigned int wrap;              /* Primary DMA wrap count            */
 
167
} drm_mga_age_t;
 
168
 
 
169
typedef struct _drm_mga_sarea {
 
170
        /* The channel for communication of state information to the kernel
 
171
         * on firing a vertex dma buffer.
 
172
         */
 
173
        drm_mga_context_regs_t context_state;
 
174
        drm_mga_server_regs_t server_state;
 
175
        drm_mga_texture_regs_t tex_state[2];
 
176
        unsigned int warp_pipe;
 
177
        unsigned int dirty;
 
178
        unsigned int vertsize;
 
179
 
 
180
        /* The current cliprects, or a subset thereof.
 
181
         */
 
182
        drm_clip_rect_t boxes[MGA_NR_SAREA_CLIPRECTS];
 
183
        unsigned int nbox;
 
184
 
 
185
        /* Information about the most recently used 3d drawable.  The
 
186
         * client fills in the req_* fields, the server fills in the
 
187
         * exported_ fields and puts the cliprects into boxes, above.
 
188
         *
 
189
         * The client clears the exported_drawable field before
 
190
         * clobbering the boxes data.
 
191
         */
 
192
        unsigned int req_drawable;       /* the X drawable id */
 
193
        unsigned int req_draw_buffer;    /* MGA_FRONT or MGA_BACK */
 
194
 
 
195
        unsigned int exported_drawable;
 
196
        unsigned int exported_index;
 
197
        unsigned int exported_stamp;
 
198
        unsigned int exported_buffers;
 
199
        unsigned int exported_nfront;
 
200
        unsigned int exported_nback;
 
201
        int exported_back_x, exported_front_x, exported_w;
 
202
        int exported_back_y, exported_front_y, exported_h;
 
203
        drm_clip_rect_t exported_boxes[MGA_NR_SAREA_CLIPRECTS];
 
204
 
 
205
        /* Counters for aging textures and for client-side throttling.
 
206
         */
 
207
        unsigned int status[4];
 
208
        unsigned int last_wrap;
 
209
 
 
210
        drm_mga_age_t last_frame;
 
211
        unsigned int last_enqueue;      /* last time a buffer was enqueued */
 
212
        unsigned int last_dispatch;     /* age of the most recently dispatched buffer */
 
213
        unsigned int last_quiescent;     /*  */
 
214
 
 
215
        /* LRU lists for texture memory in agp space and on the card.
 
216
         */
 
217
        drm_tex_region_t texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS+1];
 
218
        unsigned int texAge[MGA_NR_TEX_HEAPS];
 
219
 
 
220
        /* Mechanism to validate card state.
 
221
         */
 
222
        int ctxOwner;
 
223
} drm_mga_sarea_t;
 
224
 
 
225
 
 
226
/* WARNING: If you change any of these defines, make sure to change the
 
227
 * defines in the Xserver file (xf86drmMga.h)
 
228
 */
 
229
 
 
230
/* MGA specific ioctls
 
231
 * The device specific ioctl range is 0x40 to 0x79.
 
232
 */
 
233
#define DRM_IOCTL_MGA_INIT              DRM_IOW( 0x40, drm_mga_init_t)
 
234
#define DRM_IOCTL_MGA_FLUSH             DRM_IOW( 0x41, drm_lock_t)
 
235
#define DRM_IOCTL_MGA_RESET             DRM_IO(  0x42)
 
236
#define DRM_IOCTL_MGA_SWAP              DRM_IO(  0x43)
 
237
#define DRM_IOCTL_MGA_CLEAR             DRM_IOW( 0x44, drm_mga_clear_t)
 
238
#define DRM_IOCTL_MGA_VERTEX            DRM_IOW( 0x45, drm_mga_vertex_t)
 
239
#define DRM_IOCTL_MGA_INDICES           DRM_IOW( 0x46, drm_mga_indices_t)
 
240
#define DRM_IOCTL_MGA_ILOAD             DRM_IOW( 0x47, drm_mga_iload_t)
 
241
#define DRM_IOCTL_MGA_BLIT              DRM_IOW( 0x48, drm_mga_blit_t)
 
242
#define DRM_IOCTL_MGA_GETPARAM          DRM_IOWR(0x49, drm_mga_getparam_t)
 
243
 
 
244
typedef struct _drm_mga_warp_index {
 
245
        int installed;
 
246
        unsigned long phys_addr;
 
247
        int size;
 
248
} drm_mga_warp_index_t;
 
249
 
 
250
typedef struct drm_mga_init {
 
251
        enum {
 
252
                MGA_INIT_DMA    = 0x01,
 
253
                MGA_CLEANUP_DMA = 0x02
 
254
        } func;
 
255
 
 
256
        unsigned long sarea_priv_offset;
 
257
 
 
258
        int chipset;
 
259
        int sgram;
 
260
 
 
261
        unsigned int maccess;
 
262
 
 
263
        unsigned int fb_cpp;
 
264
        unsigned int front_offset, front_pitch;
 
265
        unsigned int back_offset, back_pitch;
 
266
 
 
267
        unsigned int depth_cpp;
 
268
        unsigned int depth_offset, depth_pitch;
 
269
 
 
270
        unsigned int texture_offset[MGA_NR_TEX_HEAPS];
 
271
        unsigned int texture_size[MGA_NR_TEX_HEAPS];
 
272
 
 
273
        unsigned long fb_offset;
 
274
        unsigned long mmio_offset;
 
275
        unsigned long status_offset;
 
276
        unsigned long warp_offset;
 
277
        unsigned long primary_offset;
 
278
        unsigned long buffers_offset;
 
279
} drm_mga_init_t;
 
280
 
 
281
typedef struct drm_mga_fullscreen {
 
282
        enum {
 
283
                MGA_INIT_FULLSCREEN    = 0x01,
 
284
                MGA_CLEANUP_FULLSCREEN = 0x02
 
285
        } func;
 
286
} drm_mga_fullscreen_t;
 
287
 
 
288
typedef struct drm_mga_clear {
 
289
        unsigned int flags;
 
290
        unsigned int clear_color;
 
291
        unsigned int clear_depth;
 
292
        unsigned int color_mask;
 
293
        unsigned int depth_mask;
 
294
} drm_mga_clear_t;
 
295
 
 
296
typedef struct drm_mga_vertex {
 
297
        int idx;                        /* buffer to queue */
 
298
        int used;                       /* bytes in use */
 
299
        int discard;                    /* client finished with buffer?  */
 
300
} drm_mga_vertex_t;
 
301
 
 
302
typedef struct drm_mga_indices {
 
303
        int idx;                        /* buffer to queue */
 
304
        unsigned int start;
 
305
        unsigned int end;
 
306
        int discard;                    /* client finished with buffer?  */
 
307
} drm_mga_indices_t;
 
308
 
 
309
typedef struct drm_mga_iload {
 
310
        int idx;
 
311
        unsigned int dstorg;
 
312
        unsigned int length;
 
313
} drm_mga_iload_t;
 
314
 
 
315
typedef struct _drm_mga_blit {
 
316
        unsigned int planemask;
 
317
        unsigned int srcorg;
 
318
        unsigned int dstorg;
 
319
        int src_pitch, dst_pitch;
 
320
        int delta_sx, delta_sy;
 
321
        int delta_dx, delta_dy;
 
322
        int height, ydir;               /* flip image vertically */
 
323
        int source_pitch, dest_pitch;
 
324
} drm_mga_blit_t;
 
325
 
 
326
/* 3.1: An ioctl to get parameters that aren't available to the 3d
 
327
 * client any other way.  
 
328
 */
 
329
#define MGA_PARAM_IRQ_NR            1
 
330
 
 
331
typedef struct drm_mga_getparam {
 
332
        int param;
 
333
        int *value;
 
334
} drm_mga_getparam_t;
 
335
 
 
336
#endif