summaryrefslogtreecommitdiffstats
path: root/vidix/mtrr.c
diff options
context:
space:
mode:
authorben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-04-06 15:20:49 +0000
committerben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-04-06 15:20:49 +0000
commit51ba40dcd64518c8d5f9ce586171c8fb347a42c0 (patch)
tree590b1ce6d17f2126b67d1a5cb1576cdd7e8dea5c /vidix/mtrr.c
parent3099d0da16505cbc0aaab34f9299404e9ec19241 (diff)
downloadmpv-51ba40dcd64518c8d5f9ce586171c8fb347a42c0.tar.bz2
mpv-51ba40dcd64518c8d5f9ce586171c8fb347a42c0.tar.xz
merged libdha and libvidix, moved all files from libdha to vidix directory
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22918 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'vidix/mtrr.c')
-rw-r--r--vidix/mtrr.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/vidix/mtrr.c b/vidix/mtrr.c
new file mode 100644
index 0000000000..04f4d5ac3b
--- /dev/null
+++ b/vidix/mtrr.c
@@ -0,0 +1,73 @@
+/*
+ mtrr.c - Stuff for optimizing memory access
+ Copyrights:
+ 2002 - Linux version by Nick Kurshev
+ Licence: GPL
+*/
+
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include "libdha.h"
+#include "AsmMacros.h"
+
+#if defined (__i386__) && defined (__NetBSD__)
+#include <sys/param.h>
+#if __NetBSD_Version__ > 105240000
+#include <stdint.h>
+#include <stdlib.h>
+#include <machine/mtrr.h>
+#include <machine/sysarch.h>
+#endif
+#endif
+
+int mtrr_set_type(unsigned base,unsigned size,int type)
+{
+#ifdef linux
+ FILE * mtrr_fd;
+ char * stype;
+ switch(type)
+ {
+ case MTRR_TYPE_UNCACHABLE: stype = "uncachable"; break;
+ case MTRR_TYPE_WRCOMB: stype = "write-combining"; break;
+ case MTRR_TYPE_WRTHROUGH: stype = "write-through"; break;
+ case MTRR_TYPE_WRPROT: stype = "write-protect"; break;
+ case MTRR_TYPE_WRBACK: stype = "write-back"; break;
+ default: return EINVAL;
+ }
+ mtrr_fd = fopen("/proc/mtrr","wt");
+ if(mtrr_fd)
+ {
+ char sout[256];
+ unsigned wr_len;
+ sprintf(sout,"base=0x%08X size=0x%08X type=%s\n",base,size,stype);
+ wr_len = fprintf(mtrr_fd,sout);
+ /*printf("MTRR: %s\n",sout);*/
+ fclose(mtrr_fd);
+ return wr_len == strlen(sout) ? 0 : EPERM;
+ }
+ return ENOSYS;
+#elif defined (__i386__ ) && defined (__NetBSD__) && __NetBSD_Version__ > 105240000
+ struct mtrr *mtrrp;
+ int n;
+
+ mtrrp = malloc(sizeof (struct mtrr));
+ mtrrp->base = base;
+ mtrrp->len = size;
+ mtrrp->type = type;
+ mtrrp->flags = MTRR_VALID | MTRR_PRIVATE;
+ n = 1;
+
+ if (i386_set_mtrr(mtrrp, &n) < 0) {
+ free(mtrrp);
+ return errno;
+ }
+ free(mtrrp);
+ return 0;
+#else
+ /* NetBSD prior to 1.5Y doesn't have MTRR support */
+ return ENOSYS;
+#endif
+}