~ubuntu-branches/ubuntu/edgy/xorg-server/edgy-updates

« back to all changes in this revision

Viewing changes to hw/kdrive/pm2/pm2.c

  • Committer: Bazaar Package Importer
  • Author(s): Rodrigo Parra Novo
  • Date: 2006-07-25 20:06:28 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20060725200628-gjmmd9gxfxdc4ejs
Tags: 1:1.1.1-0ubuntu1
* New Upstream version
* Changed Build-Depends from mesa-swrast-source to mesa-swx11-source,
  following Debian package nomenclature
* Re-did 12_security_policy_in_etc.diff for 1.1.1
* Dropped 15_security_allocate_local.diff (applied upstream)
* Dropped 16_SECURITY_setuid.diff (applied upstream)
* Dropped 000_ubuntu_fix_read_kernel_mapping.patch (applied upstream)
* Dropped 002_ubuntu_fix_for_certain_intel_chipsets.patch (applied upstream)
* Updated versioned Build-Depends on mesa-swx11-source to version
  6.5.0.cvs.20060725-0ubuntu1
* Added arrayobj.c, arrayobj.h, bitset.h & rbadaptors.h to
  GL/symlink-mesa.sh (linked from mesa-swx11-source)
* Added arrayobj.c to default build target on GL/mesa/main

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifdef HAVE_CONFIG_H
 
2
#include <kdrive-config.h>
 
3
#endif
 
4
#include "kdrive.h"
 
5
#include "kaa.h"
 
6
 
 
7
#include "pm2.h"
 
8
 
 
9
#define PARTPROD(a,b,c) (((a)<<6) | ((b)<<3) | (c))
 
10
 
 
11
char bppand[4] = { 0x03, /* 8bpp */
 
12
                   0x01, /* 16bpp */
 
13
                   0x00, /* 24bpp */
 
14
                   0x00  /* 32bpp */};
 
15
 
 
16
int partprodPermedia[] = {
 
17
        -1,
 
18
        PARTPROD(0,0,1), PARTPROD(0,1,1), PARTPROD(1,1,1), PARTPROD(1,1,2),
 
19
        PARTPROD(1,2,2), PARTPROD(2,2,2), PARTPROD(1,2,3), PARTPROD(2,2,3),
 
20
        PARTPROD(1,3,3), PARTPROD(2,3,3), PARTPROD(1,2,4), PARTPROD(3,3,3),
 
21
        PARTPROD(1,3,4), PARTPROD(2,3,4),              -1, PARTPROD(3,3,4), 
 
22
        PARTPROD(1,4,4), PARTPROD(2,4,4),              -1, PARTPROD(3,4,4), 
 
23
                     -1, PARTPROD(2,3,5),              -1, PARTPROD(4,4,4), 
 
24
        PARTPROD(1,4,5), PARTPROD(2,4,5), PARTPROD(3,4,5),              -1,
 
25
                     -1,              -1,              -1, PARTPROD(4,4,5), 
 
26
        PARTPROD(1,5,5), PARTPROD(2,5,5),              -1, PARTPROD(3,5,5), 
 
27
                     -1,              -1,              -1, PARTPROD(4,5,5), 
 
28
                     -1,              -1,              -1, PARTPROD(3,4,6),
 
29
                     -1,              -1,              -1, PARTPROD(5,5,5), 
 
30
        PARTPROD(1,5,6), PARTPROD(2,5,6),              -1, PARTPROD(3,5,6),
 
31
                     -1,              -1,              -1, PARTPROD(4,5,6),
 
32
                     -1,              -1,              -1,              -1,
 
33
                     -1,              -1,              -1, PARTPROD(5,5,6),
 
34
                     -1,              -1,              -1,              -1,
 
35
                     -1,              -1,              -1,              -1,
 
36
                     -1,              -1,              -1,              -1,
 
37
                     -1,              -1,              -1,              -1,
 
38
                     -1,              -1,              -1,              -1,
 
39
                     -1,              -1,              -1,              -1,
 
40
                     -1,              -1,              -1,              -1,
 
41
                     -1,              -1,              -1,              -1,
 
42
                     -1,              -1,              -1,              -1,
 
43
                     -1,              -1,              -1,              -1,
 
44
                     -1,              -1,              -1,              -1,
 
45
                     -1,              -1,              -1,              -1,
 
46
                     -1,              -1,              -1,              -1,
 
47
                     -1,              -1,              -1,              -1,
 
48
                     -1,              -1,              -1,              -1,
 
49
                     -1,              -1,              -1,              -1,
 
50
                     0};
 
51
 
 
52
static Bool
 
53
pmMapReg(KdCardInfo *card, PM2CardInfo *pm2c)
 
54
{
 
55
        pm2c->reg_base = (CARD8 *)KdMapDevice(PM2_REG_BASE(card),
 
56
            PM2_REG_SIZE(card));
 
57
 
 
58
        if (pm2c->reg_base == NULL)
 
59
                return FALSE;
 
60
 
 
61
        KdSetMappedMode(PM2_REG_BASE(card), PM2_REG_SIZE(card),
 
62
            KD_MAPPED_MODE_REGISTERS);
 
63
 
 
64
        return TRUE;
 
65
}
 
66
 
 
67
static void
 
68
pmUnmapReg(KdCardInfo *card, PM2CardInfo *pm2c)
 
69
{
 
70
        if (pm2c->reg_base) {
 
71
                KdResetMappedMode(PM2_REG_BASE(card), PM2_REG_SIZE(card),
 
72
                    KD_MAPPED_MODE_REGISTERS);
 
73
                KdUnmapDevice((void *)pm2c->reg_base, PM2_REG_SIZE(card));
 
74
                pm2c->reg_base = 0;
 
75
        }
 
76
}
 
77
 
 
78
Bool
 
79
pmCardInit (KdCardInfo *card)
 
80
{
 
81
    PM2CardInfo *pm2c;
 
82
 
 
83
    pm2c = (PM2CardInfo *) xalloc (sizeof (PM2CardInfo));
 
84
    if (!pm2c)
 
85
        return FALSE;
 
86
    memset (pm2c, '\0', sizeof (PM2CardInfo));
 
87
 
 
88
    (void) pmMapReg (card, pm2c);
 
89
 
 
90
    if (!vesaInitialize (card, &pm2c->vesa))
 
91
    {
 
92
        xfree (pm2c);
 
93
        return FALSE;
 
94
    }
 
95
    
 
96
    pm2c->InFifoSpace = 0;
 
97
 
 
98
    card->driver = pm2c;    
 
99
 
 
100
    return TRUE;
 
101
}
 
102
 
 
103
static  void
 
104
pmCardFini (KdCardInfo *card)
 
105
{
 
106
    PM2CardInfo *pm2c = (PM2CardInfo *) card->driver;
 
107
    
 
108
    pmUnmapReg (card, pm2c);
 
109
    vesaCardFini (card);
 
110
}
 
111
 
 
112
Bool
 
113
pmScreenInit (KdScreenInfo *screen)
 
114
{
 
115
    PM2CardInfo *pm2c = screen->card->driver;
 
116
    PM2ScreenInfo       *pm2s;
 
117
    int                 screen_size, memory;
 
118
 
 
119
    pm2s = (PM2ScreenInfo *) xalloc (sizeof (PM2ScreenInfo));
 
120
    if (!pm2s)
 
121
        return FALSE;
 
122
    memset (pm2s, '\0', sizeof (PM2ScreenInfo));
 
123
 
 
124
    if (!vesaScreenInitialize (screen, &pm2s->vesa))
 
125
    {
 
126
        xfree (pm2s);
 
127
        return FALSE;
 
128
    }
 
129
 
 
130
    pm2c->pprod = partprodPermedia[screen->width >> 5];
 
131
    pm2c->bppalign = bppand[(screen->fb[0].bitsPerPixel>>3)-1];
 
132
 
 
133
    pm2s->screen = pm2s->vesa.fb;
 
134
    memory = pm2s->vesa.fb_size;
 
135
    
 
136
    screen_size = screen->fb[0].byteStride * screen->height;
 
137
    
 
138
    if (pm2s->screen && memory >= screen_size + 2048)
 
139
    {
 
140
        memory -= 2048;
 
141
        pm2s->cursor_base = pm2s->screen + memory - 2048;
 
142
    }
 
143
    else
 
144
        pm2s->cursor_base = 0;
 
145
    memory -= screen_size;
 
146
    if (memory > screen->fb[0].byteStride)
 
147
    {
 
148
        pm2s->off_screen = pm2s->screen + screen_size;
 
149
        pm2s->off_screen_size = memory;
 
150
    }
 
151
    else
 
152
    {
 
153
        pm2s->off_screen = 0;
 
154
        pm2s->off_screen_size = 0;
 
155
    }
 
156
 
 
157
    switch (screen->fb[0].bitsPerPixel) {
 
158
    case 8:
 
159
        pm2c->BppShift = 2;
 
160
        break;
 
161
    case 16:
 
162
        pm2c->BppShift = 1;
 
163
        break;
 
164
    case 24:
 
165
        pm2c->BppShift = 2;
 
166
        break;
 
167
    case 32:
 
168
        pm2c->BppShift = 0;
 
169
        break;
 
170
    }
 
171
 
 
172
    screen->driver = pm2s;
 
173
 
 
174
    return TRUE;
 
175
}
 
176
 
 
177
static void
 
178
pmScreenFini (KdScreenInfo *screen)
 
179
{
 
180
    PM2ScreenInfo       *pm2s = (PM2ScreenInfo *) screen->driver;
 
181
 
 
182
    vesaScreenFini (screen);
 
183
    xfree (pm2s);
 
184
    screen->driver = 0;
 
185
}
 
186
 
 
187
static Bool
 
188
pmInitScreen (ScreenPtr pScreen)
 
189
{
 
190
    return vesaInitScreen (pScreen);
 
191
}
 
192
 
 
193
#ifdef RANDR
 
194
static Bool
 
195
pmRandRSetConfig (ScreenPtr             pScreen,
 
196
                      Rotation          rotation,
 
197
                      int               rate,
 
198
                      RRScreenSizePtr   pSize)
 
199
{
 
200
    kaaWaitSync (pScreen);
 
201
 
 
202
    if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
 
203
        return FALSE;
 
204
    
 
205
    return TRUE;
 
206
}
 
207
 
 
208
static void
 
209
pmRandRInit (ScreenPtr pScreen)
 
210
{
 
211
    rrScrPriv(pScreen);
 
212
 
 
213
    pScrPriv->rrSetConfig = pmRandRSetConfig;
 
214
}
 
215
#endif
 
216
 
 
217
static Bool
 
218
pmFinishInitScreen (ScreenPtr pScreen)
 
219
{
 
220
    Bool    ret;
 
221
    ret = vesaFinishInitScreen (pScreen);
 
222
#ifdef RANDR
 
223
    pmRandRInit (pScreen);
 
224
#endif
 
225
    return ret;
 
226
}
 
227
 
 
228
static void
 
229
pmPreserve(KdCardInfo *card)
 
230
{
 
231
    vesaPreserve(card);
 
232
}
 
233
 
 
234
static void
 
235
pmRestore(KdCardInfo *card)
 
236
{
 
237
    vesaRestore (card);
 
238
}
 
239
 
 
240
static Bool
 
241
pmEnable (ScreenPtr pScreen)
 
242
{
 
243
    if (!vesaEnable (pScreen))
 
244
        return FALSE;
 
245
    
 
246
#ifdef XV
 
247
    KdXVEnable (pScreen);
 
248
#endif
 
249
 
 
250
    return TRUE;
 
251
}
 
252
 
 
253
static void
 
254
pmDisable(ScreenPtr pScreen)
 
255
{
 
256
#ifdef XV
 
257
    KdXVDisable (pScreen);
 
258
#endif
 
259
    vesaDisable (pScreen);
 
260
}
 
261
 
 
262
static Bool
 
263
pmDPMS(ScreenPtr pScreen, int mode) 
 
264
{
 
265
    return vesaDPMS (pScreen, mode);
 
266
}
 
267
 
 
268
KdCardFuncs     PM2Funcs = {
 
269
    pmCardInit,               /* cardinit */
 
270
    pmScreenInit,             /* scrinit */
 
271
    pmInitScreen,             /* initScreen */
 
272
    pmFinishInitScreen, /* finishInitScreen */
 
273
    vesaCreateResources,    /* createRes */
 
274
    pmPreserve,               /* preserve */
 
275
    pmEnable,                 /* enable */
 
276
    pmDPMS,                   /* dpms */
 
277
    pmDisable,                /* disable */
 
278
    pmRestore,                /* restore */
 
279
    pmScreenFini,             /* scrfini */
 
280
    pmCardFini,               /* cardfini */
 
281
    
 
282
    0,                          /* initCursor */
 
283
    0,                          /* enableCursor */
 
284
    0,                          /* disableCursor */
 
285
    0,                          /* finiCursor */
 
286
    NULL,                       /* recolorCursor */
 
287
 
 
288
    pmDrawInit,              /* initAccel */
 
289
    pmDrawEnable,            /* enableAccel */
 
290
    pmDrawDisable,           /* disableAccel */
 
291
    pmDrawFini,              /* finiAccel */
 
292
    
 
293
    vesaGetColors,          /* getColors */
 
294
    vesaPutColors,          /* putColors */
 
295
};