Mercurial > mplayer.hg
annotate vidix/mtrr.c @ 25040:ea694492cb2e
Open device file only right before we need it, so we do not
have to add close to all the abort code-paths
author | reimar |
---|---|
date | Sat, 17 Nov 2007 18:26:25 +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 } |