annotate vidix/sysdep/pci_os2.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents 9c4ad35fabc5
children 502f04b67653
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
1 /*
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
2 This file is based on:
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
3 $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
4 Modified for readability by Nick Kurshev
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
5 */
25132
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
6 /*
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
7 * Copyright 1995 by Robin Cutshaw <robin@XFree86.Org>
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
8 *
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
9 * Permission to use, copy, modify, distribute, and sell this software and its
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
10 * documentation for any purpose is hereby granted without fee, provided that
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
11 * the above copyright notice appear in all copies and that both that
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
12 * copyright notice and this permission notice appear in supporting
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
13 * documentation, and that the names of the above listed copyright holder(s)
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
14 * not be used in advertising or publicity pertaining to distribution of
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
15 * the software without specific, written prior permission. The above listed
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
16 * copyright holder(s) make(s) no representations about the suitability of this
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
17 * software for any purpose. It is provided "as is" without express or
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
18 * implied warranty.
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
19 *
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
20 * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
21 * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
22 * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
23 * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
24 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
25 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
26 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
27 */
9c4ad35fabc5 Restore copyright/license notices that were stripped off.
diego
parents: 22900
diff changeset
28
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
29 #define INCL_DOSFILEMGR
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
30 #include <os2.h>
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
31
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
32 static USHORT callgate[3] = {0,0,0};
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
33
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
34 static __inline__ int enable_os_io(void)
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
35 {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
36 HFILE hfd;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
37 ULONG dlen,action;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
38 APIRET rc;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
39 static char *ioDrvPath = "/dev/fastio$";
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
40
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
41 if (DosOpen((PSZ)ioDrvPath, (PHFILE)&hfd, (PULONG)&action,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
42 (ULONG)0, FILE_SYSTEM, FILE_OPEN,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
43 OPEN_SHARE_DENYNONE|OPEN_FLAGS_NOINHERIT|OPEN_ACCESS_READONLY,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
44 (ULONG)0) != 0) {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
45 fprintf(stderr,"Error opening fastio$ driver...\n");
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
46 fprintf(stderr,"Please install xf86sup.sys in config.sys!\n");
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
47 return(42);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
48 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
49 callgate[0] = callgate[1] = 0;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
50
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
51 /* Get callgate from driver for fast io to ports and other stuff */
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
52
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
53 rc = DosDevIOCtl(hfd, (ULONG)0x76, (ULONG)0x64,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
54 NULL, 0, NULL,
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
55 (ULONG*)&callgate[2], sizeof(USHORT), &dlen);
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
56 if (rc) {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
57 fprintf(stderr,"xf86-OS/2: EnableIOPorts failed, rc=%d, dlen=%d; emergency exit\n",
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
58 rc,dlen);
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
59 DosClose(hfd);
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
60 return(42);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
61 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
62
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
63 /* Calling callgate with function 13 sets IOPL for the program */
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
64
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
65 asm volatile ("movl $13,%%ebx;.byte 0xff,0x1d;.long _callgate"
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
66 : /*no outputs */
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
67 : /*no inputs */
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
68 : "eax","ebx","ecx","edx","cc");
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
69
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
70 DosClose(hfd);
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
71 return(0);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
72 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
73
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
74 static __inline__ int disable_os_io(void)
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
75 {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
76 /* Nothing to do */
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
77 return(0);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
78 }