Mercurial > mplayer.hg
annotate vidix/mtrr.c @ 26625:5b89b42f6d50
Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
AltiVec code needs -maltivec to compile, but then AltiVec instructions
appear in other places of the code causing MPlayer to sigill.
Somehow upstream libmpeg2 manages not to sigill under what appear to be
the same circumstances. Enlightenment welcome.
author | diego |
---|---|
date | Sat, 03 May 2008 15:23:22 +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 } |