Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _GAMMA_DRM_H_ |
2 | #define _GAMMA_DRM_H_ | |
3 | ||
4 | typedef struct _drm_gamma_tex_region { | |
5 | unsigned char next, prev; /* indices to form a circular LRU */ | |
6 | unsigned char in_use; /* owned by a client, or free? */ | |
7 | int age; /* tracked by clients to update local LRU's */ | |
8 | } drm_gamma_tex_region_t; | |
9 | ||
10 | typedef struct { | |
11 | unsigned int GDeltaMode; | |
12 | unsigned int GDepthMode; | |
13 | unsigned int GGeometryMode; | |
14 | unsigned int GTransformMode; | |
15 | } drm_gamma_context_regs_t; | |
16 | ||
17 | typedef struct _drm_gamma_sarea { | |
18 | drm_gamma_context_regs_t context_state; | |
19 | ||
20 | unsigned int dirty; | |
21 | ||
22 | ||
23 | /* Maintain an LRU of contiguous regions of texture space. If | |
24 | * you think you own a region of texture memory, and it has an | |
25 | * age different to the one you set, then you are mistaken and | |
26 | * it has been stolen by another client. If global texAge | |
27 | * hasn't changed, there is no need to walk the list. | |
28 | * | |
29 | * These regions can be used as a proxy for the fine-grained | |
30 | * texture information of other clients - by maintaining them | |
31 | * in the same lru which is used to age their own textures, | |
32 | * clients have an approximate lru for the whole of global | |
33 | * texture space, and can make informed decisions as to which | |
34 | * areas to kick out. There is no need to choose whether to | |
35 | * kick out your own texture or someone else's - simply eject | |
36 | * them all in LRU order. | |
37 | */ | |
38 | ||
39 | #define GAMMA_NR_TEX_REGIONS 64 | |
40 | drm_gamma_tex_region_t texList[GAMMA_NR_TEX_REGIONS+1]; | |
41 | /* Last elt is sentinal */ | |
42 | int texAge; /* last time texture was uploaded */ | |
43 | int last_enqueue; /* last time a buffer was enqueued */ | |
44 | int last_dispatch; /* age of the most recently dispatched buffer */ | |
45 | int last_quiescent; /* */ | |
46 | int ctxOwner; /* last context to upload state */ | |
47 | ||
48 | int vertex_prim; | |
49 | } drm_gamma_sarea_t; | |
50 | ||
51 | /* WARNING: If you change any of these defines, make sure to change the | |
52 | * defines in the Xserver file (xf86drmGamma.h) | |
53 | */ | |
54 | ||
55 | /* Gamma specific ioctls | |
56 | * The device specific ioctl range is 0x40 to 0x79. | |
57 | */ | |
58 | #define DRM_IOCTL_GAMMA_INIT DRM_IOW( 0x40, drm_gamma_init_t) | |
59 | #define DRM_IOCTL_GAMMA_COPY DRM_IOW( 0x41, drm_gamma_copy_t) | |
60 | ||
61 | typedef struct drm_gamma_copy { | |
62 | unsigned int DMAOutputAddress; | |
63 | unsigned int DMAOutputCount; | |
64 | unsigned int DMAReadGLINTSource; | |
65 | unsigned int DMARectangleWriteAddress; | |
66 | unsigned int DMARectangleWriteLinePitch; | |
67 | unsigned int DMARectangleWrite; | |
68 | unsigned int DMARectangleReadAddress; | |
69 | unsigned int DMARectangleReadLinePitch; | |
70 | unsigned int DMARectangleRead; | |
71 | unsigned int DMARectangleReadTarget; | |
72 | } drm_gamma_copy_t; | |
73 | ||
74 | typedef struct drm_gamma_init { | |
75 | enum { | |
76 | GAMMA_INIT_DMA = 0x01, | |
77 | GAMMA_CLEANUP_DMA = 0x02 | |
78 | } func; | |
79 | ||
80 | int sarea_priv_offset; | |
81 | int pcimode; | |
82 | unsigned int mmio0; | |
83 | unsigned int mmio1; | |
84 | unsigned int mmio2; | |
85 | unsigned int mmio3; | |
86 | unsigned int buffers_offset; | |
87 | int num_rast; | |
88 | } drm_gamma_init_t; | |
89 | ||
90 | #endif /* _GAMMA_DRM_H_ */ |