mtrr.c

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C语言 代码 · 共 89 行

C
89
字号
/* * VIDIX Memory access optimization routines. * Copyright (C) 2002 Nick Kurshev * * This file is part of MPlayer. * * MPlayer is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MPlayer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MPlayer; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */#include "config.h"#include <mplaylib.h>#include <mplaylib.h>#include <errno.h>#include "dha.h"#include "AsmMacros.h"#if defined (__i386__) && defined (__NetBSD__)#include <sys/param.h>#if __NetBSD_Version__ > 105240000#include <stdint.h>#include <mplaylib.h>#include <machine/mtrr.h>#include <machine/sysarch.h>#endif#endifint	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}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?