view libdha/mtrr.c @ 8078:26a2ae540b04

bugfixes : - It seems the CONF_TYPE_SUBCONFIG array for the "mode" option eats all other -xvidencopts parameters. With it it wasn't possible to set the bitrate or in fact any other parameter beside "mode". - xvidencopts_conf wasn't properly initialised for some of the lines. Probably didn't cause bugs but at least this shaves a few gcc warnings. - Rewrote initialisation code & defaults according to xvidcore/docs/xvid-encoder.txt in XViD CVS tree. Some of the defaults where bad. Done with the help of Markus Liebl < lieblm at web dot de > modified features: - Changed "debug" default to 0. Use the "debug" flag to enable it. - Changed the interpretation of "br" to be consistent with lavc (now in kbits/s if <16000, else bits/s). Should be backward compatible. - Now use "-xvidopts pass=(1|2)" instead of "-xvidopts mode=2pass-(1|2)". - Use the "-passtmpfile" global option instead of a hardwired name. - Use the same motion presets as XViD's vfw CVS code (which is the source of the windows codec I assume). coding style etc...: - Use static variables instead of a big struct for individual options, easier to initialize. - [f]printf() ->> mp_msg() added features: - Added "lumi_mask", "mpeg_quant", "hintedme" and "hintfile" options, all off by default.
author rguyom
date Sun, 03 Nov 2002 12:43:30 +0000
parents e9bd97d5c5cc
children 243f6f5d0bb9
line wrap: on
line source

/*
    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

#if defined( __i386__ )
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 (__NetBSD__)
#if __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
#else
#warning Please port MTRR stuff!!!
    return ENOSYS;
#endif
}
#else
int	mtrr_set_type(unsigned base,unsigned size,int type)
{
    return ENOSYS;
}
#endif