Mercurial > mplayer.hg
annotate vidix/mtrr.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 | 82216ef041e0 |
children | 3abd1629658b |
rev | line source |
---|---|
4476 | 1 /* |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
2 * VIDIX Memory access optimization routines. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
3 * Copyright (C) 2002 Nick Kurshev |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
4 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
5 * This file is part of MPlayer. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
6 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
7 * MPlayer is free software; you can redistribute it and/or modify |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
8 * it under the terms of the GNU General Public License as published by |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
9 * the Free Software Foundation; either version 2 of the License, or |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
10 * (at your option) any later version. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
11 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
12 * MPlayer is distributed in the hope that it will be useful, |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
15 * GNU General Public License for more details. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
16 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
17 * You should have received a copy of the GNU General Public License |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
18 * along with MPlayer; if not, write to the Free Software |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
20 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22901
diff
changeset
|
21 */ |
4476 | 22 |
23 #include "config.h" | |
24 | |
25 #include <stdio.h> | |
6335
e9bd97d5c5cc
warning & newline fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
6011
diff
changeset
|
26 #include <string.h> |
4476 | 27 #include <errno.h> |
22901 | 28 #include "dha.h" |
4476 | 29 #include "AsmMacros.h" |
30 | |
5872 | 31 #if defined (__i386__) && defined (__NetBSD__) |
6011
5f020e2dc745
patchs for NetBSD by Bernd Ernesti <mplayer@lists.veego.de>:
pl
parents:
5872
diff
changeset
|
32 #include <sys/param.h> |
5f020e2dc745
patchs for NetBSD by Bernd Ernesti <mplayer@lists.veego.de>:
pl
parents:
5872
diff
changeset
|
33 #if __NetBSD_Version__ > 105240000 |
5872 | 34 #include <stdint.h> |
35 #include <stdlib.h> | |
36 #include <machine/mtrr.h> | |
37 #include <machine/sysarch.h> | |
38 #endif | |
6011
5f020e2dc745
patchs for NetBSD by Bernd Ernesti <mplayer@lists.veego.de>:
pl
parents:
5872
diff
changeset
|
39 #endif |
4476 | 40 |
41 int mtrr_set_type(unsigned base,unsigned size,int type) | |
42 { | |
43 #ifdef linux | |
44 FILE * mtrr_fd; | |
45 char * stype; | |
46 switch(type) | |
47 { | |
48 case MTRR_TYPE_UNCACHABLE: stype = "uncachable"; break; | |
49 case MTRR_TYPE_WRCOMB: stype = "write-combining"; break; | |
50 case MTRR_TYPE_WRTHROUGH: stype = "write-through"; break; | |
51 case MTRR_TYPE_WRPROT: stype = "write-protect"; break; | |
52 case MTRR_TYPE_WRBACK: stype = "write-back"; break; | |
53 default: return EINVAL; | |
54 } | |
55 mtrr_fd = fopen("/proc/mtrr","wt"); | |
56 if(mtrr_fd) | |
57 { | |
4495 | 58 char sout[256]; |
59 unsigned wr_len; | |
60 sprintf(sout,"base=0x%08X size=0x%08X type=%s\n",base,size,stype); | |
61 wr_len = fprintf(mtrr_fd,sout); | |
62 /*printf("MTRR: %s\n",sout);*/ | |
4476 | 63 fclose(mtrr_fd); |
4495 | 64 return wr_len == strlen(sout) ? 0 : EPERM; |
4476 | 65 } |
66 return ENOSYS; | |
16377
243f6f5d0bb9
Make MTRR setup work on AMD64 and simplify some #ifdefs
reimar
parents:
6335
diff
changeset
|
67 #elif defined (__i386__ ) && defined (__NetBSD__) && __NetBSD_Version__ > 105240000 |
5872 | 68 struct mtrr *mtrrp; |
69 int n; | |
70 | |
71 mtrrp = malloc(sizeof (struct mtrr)); | |
72 mtrrp->base = base; | |
73 mtrrp->len = size; | |
74 mtrrp->type = type; | |
75 mtrrp->flags = MTRR_VALID | MTRR_PRIVATE; | |
76 n = 1; | |
77 | |
78 if (i386_set_mtrr(mtrrp, &n) < 0) { | |
79 free(mtrrp); | |
80 return errno; | |
81 } | |
82 free(mtrrp); | |
83 return 0; | |
4476 | 84 #else |
6011
5f020e2dc745
patchs for NetBSD by Bernd Ernesti <mplayer@lists.veego.de>:
pl
parents:
5872
diff
changeset
|
85 /* NetBSD prior to 1.5Y doesn't have MTRR support */ |
5f020e2dc745
patchs for NetBSD by Bernd Ernesti <mplayer@lists.veego.de>:
pl
parents:
5872
diff
changeset
|
86 return ENOSYS; |
5f020e2dc745
patchs for NetBSD by Bernd Ernesti <mplayer@lists.veego.de>:
pl
parents:
5872
diff
changeset
|
87 #endif |
4476 | 88 } |