亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? mach64_vid.c

?? 原名叫avifile
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*   mach64_vid - VIDIX based video driver for Mach64 and 3DRage chips   Copyrights 2002 Nick Kurshev. This file is based on sources from   GATOS (gatos.sf.net) and X11 (www.xfree86.org)   Licence: GPL   WARNING: THIS DRIVER IS IN BETTA STAGE*/#include "../../config.h"#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <math.h>#include <inttypes.h>#include <fcntl.h>#include <limits.h>#include <sys/mman.h> /* for m(un)lock */#ifdef HAVE_MALLOC_H#include <malloc.h>#ifdef HAVE_MEMALIGN#define MACH64_ENABLE_BM 1#endif#endif#include "../../config.h"#include "../../bswap.h"#include "../vidix.h"#include "../fourcc.h"#include "../../libdha/libdha.h"#include "../../libdha/pci_ids.h"#include "../../libdha/pci_names.h"#include "mach64.h"#define UNUSED(x) ((void)(x)) /**< Removes warning about unused arguments */#define VIDIX_STATIC mach64_#ifdef MACH64_ENABLE_BM#define cpu_to_le32(a) (a)#define VIRT_TO_CARD(a,b,c) bm_virt_to_bus(a,b,c)#pragma pack(1)typedef struct{	uint32_t framebuf_offset;	uint32_t sys_addr;	uint32_t command;	uint32_t reserved;} bm_list_descriptor;#pragma pack()static void *mach64_dma_desc_base[64];static unsigned long bus_addr_dma_desc = 0;static unsigned long *dma_phys_addrs;#endifstatic void *mach64_mmio_base = 0;static void *mach64_mem_base = 0;static int32_t mach64_overlay_offset = 0;static uint32_t mach64_ram_size = 0;static uint32_t mach64_buffer_base[64][3];static int num_mach64_buffers=-1;static int supports_planar=0;static int supports_colour_adj=0;static int supports_idct=0;static int supports_subpic=0;static int supports_lcd_v_stretch=0;pciinfo_t pci_info;static int probed = 0;static int __verbose = 0;#define VERBOSE_LEVEL 2typedef struct bes_registers_s{  /* base address of yuv framebuffer */  uint32_t yuv_base;  uint32_t fourcc;  /* YUV BES registers */  uint32_t reg_load_cntl;  uint32_t scale_inc;  uint32_t y_x_start;  uint32_t y_x_end;  uint32_t vid_buf_pitch;  uint32_t height_width;  uint32_t scale_cntl;  uint32_t exclusive_horz;  uint32_t auto_flip_cntl;  uint32_t filter_cntl;  uint32_t key_cntl;  uint32_t test;  /* Configurable stuff */    int brightness;  int saturation;    int ckey_on;  uint32_t graphics_key_clr;  uint32_t graphics_key_msk;    int deinterlace_on;  uint32_t deinterlace_pattern;  } bes_registers_t;static bes_registers_t besr;typedef struct video_registers_s{  const char * sname;  uint32_t name;  uint32_t value;}video_registers_t;static bes_registers_t besr;/* Graphic keys */static vidix_grkey_t mach64_grkey;#define DECLARE_VREG(name) { #name, name, 0 }static video_registers_t vregs[] = {  DECLARE_VREG(OVERLAY_SCALE_INC),  DECLARE_VREG(OVERLAY_Y_X_START),  DECLARE_VREG(OVERLAY_Y_X_END),  DECLARE_VREG(OVERLAY_SCALE_CNTL),  DECLARE_VREG(OVERLAY_EXCLUSIVE_HORZ),  DECLARE_VREG(OVERLAY_EXCLUSIVE_VERT),  DECLARE_VREG(OVERLAY_TEST),  DECLARE_VREG(SCALER_BUF_PITCH),  DECLARE_VREG(SCALER_HEIGHT_WIDTH),  DECLARE_VREG(SCALER_BUF0_OFFSET),  DECLARE_VREG(SCALER_BUF0_OFFSET_U),  DECLARE_VREG(SCALER_BUF0_OFFSET_V),  DECLARE_VREG(SCALER_BUF1_OFFSET),  DECLARE_VREG(SCALER_BUF1_OFFSET_U),  DECLARE_VREG(SCALER_BUF1_OFFSET_V),  DECLARE_VREG(SCALER_H_COEFF0),  DECLARE_VREG(SCALER_H_COEFF1),  DECLARE_VREG(SCALER_H_COEFF2),  DECLARE_VREG(SCALER_H_COEFF3),  DECLARE_VREG(SCALER_H_COEFF4),  DECLARE_VREG(SCALER_COLOUR_CNTL),  DECLARE_VREG(SCALER_THRESHOLD),  DECLARE_VREG(VIDEO_FORMAT),  DECLARE_VREG(VIDEO_CONFIG),  DECLARE_VREG(VIDEO_SYNC_TEST),  DECLARE_VREG(VIDEO_SYNC_TEST_B),  DECLARE_VREG(BUS_CNTL),  DECLARE_VREG(SRC_CNTL),  DECLARE_VREG(GUI_STAT),  DECLARE_VREG(BM_ADDR),  DECLARE_VREG(BM_DATA),  DECLARE_VREG(BM_HOSTDATA),  DECLARE_VREG(BM_GUI_TABLE_CMD),  DECLARE_VREG(BM_FRAME_BUF_OFFSET),  DECLARE_VREG(BM_SYSTEM_MEM_ADDR),  DECLARE_VREG(BM_COMMAND),  DECLARE_VREG(BM_STATUS),  DECLARE_VREG(BM_GUI_TABLE),  DECLARE_VREG(BM_SYSTEM_TABLE),  DECLARE_VREG(AGP_BASE),  DECLARE_VREG(AGP_CNTL),  DECLARE_VREG(CRTC_INT_CNTL)};/* VIDIX exports *//* MMIO space*/#define GETREG(TYPE,PTR,OFFZ)		(*((volatile TYPE*)((PTR)+(OFFZ))))#define SETREG(TYPE,PTR,OFFZ,VAL)	(*((volatile TYPE*)((PTR)+(OFFZ))))=VAL#define INREG8(addr)		GETREG(uint8_t,(uint32_t)mach64_mmio_base,((addr)^0x100)<<2)#define OUTREG8(addr,val)	SETREG(uint8_t,(uint32_t)mach64_mmio_base,((addr)^0x100)<<2,val)static inline uint32_t INREG (uint32_t addr) {    uint32_t tmp = GETREG(uint32_t,(uint32_t)mach64_mmio_base,((addr)^0x100)<<2);    return le2me_32(tmp);}#define OUTREG(addr,val)	SETREG(uint32_t,(uint32_t)mach64_mmio_base,((addr)^0x100)<<2,me2le_32(val))#define OUTREGP(addr,val,mask)  					\	do {								\		unsigned int _tmp = INREG(addr);			\		_tmp &= (mask);						\		_tmp |= (val);						\		OUTREG(addr, _tmp);					\	} while (0)static __inline__ int ATIGetMach64LCDReg(int _Index){        OUTREG8(LCD_INDEX, _Index);        return INREG(LCD_DATA);}static __inline__ uint32_t INPLL(uint32_t addr){    uint32_t res;    uint32_t in;        in= INREG(CLOCK_CNTL);    in &= ~((PLL_WR_EN | PLL_ADDR)); //clean some stuff    OUTREG(CLOCK_CNTL, in | (addr<<10));        /* read the register value */    res = (INREG(CLOCK_CNTL)>>16)&0xFF;    return res;}static __inline__ void OUTPLL(uint32_t addr,uint32_t val){//FIXME buggy but its not used    /* write addr byte */    OUTREG8(CLOCK_CNTL + 1, (addr << 2) | PLL_WR_EN);    /* write the register value */    OUTREG(CLOCK_CNTL + 2, val);    OUTREG8(CLOCK_CNTL + 1, (addr << 2) & ~PLL_WR_EN);}#define OUTPLLP(addr,val,mask)  					\	do {								\		unsigned int _tmp = INPLL(addr);			\		_tmp &= (mask);						\		_tmp |= (val);						\		OUTPLL(addr, _tmp);					\	} while (0)	static void mach64_engine_reset( void ){  /* Kill off bus mastering with extreme predjudice... */  OUTREG(BUS_CNTL, INREG(BUS_CNTL) | BUS_MASTER_DIS);  OUTREG(CRTC_INT_CNTL,INREG(CRTC_INT_CNTL)&~(CRTC_BUSMASTER_EOL_INT|CRTC_BUSMASTER_EOL_INT_EN));  /* Reset engine -- This is accomplished by setting bit 8 of the GEN_TEST_CNTL   register high, then low (per the documentation, it's on high to low transition   that the GUI engine gets reset...) */  OUTREG( GEN_TEST_CNTL, INREG( GEN_TEST_CNTL ) | GEN_GUI_EN );  OUTREG( GEN_TEST_CNTL, INREG( GEN_TEST_CNTL ) & ~GEN_GUI_EN );}static void mach64_fifo_wait(unsigned n) {    while ((INREG(FIFO_STAT) & 0xffff) > ((uint32_t)(0x8000 >> n)));}static void mach64_wait_for_idle( void ) {    unsigned i;    mach64_fifo_wait(16);    for (i=0; i<2000000; i++) if((INREG(GUI_STAT) & GUI_ACTIVE) == 0) break;    if((INREG(GUI_STAT) & 1) != 0) mach64_engine_reset(); /* due card lookup */}static void mach64_wait_vsync( void ){    int i;    for(i=0; i<2000000; i++)	if( (INREG(CRTC_INT_CNTL)&CRTC_VBLANK)==0 ) break;    for(i=0; i<2000000; i++)	if( (INREG(CRTC_INT_CNTL)&CRTC_VBLANK) ) break;}static vidix_capability_t mach64_cap ={    "BES driver for Mach64/3DRage cards",    "Nick Kurshev and Michael Niedermayer",    TYPE_OUTPUT,    { 0, 0, 0, 0 },    2048,    2048,    4,    4,    -1,    FLAG_UPSCALER|FLAG_DOWNSCALER,    VENDOR_ATI,    -1,    { 0, 0, 0, 0 }};static uint32_t mach64_vid_get_dbpp( void ){  uint32_t dbpp,retval;  dbpp = (INREG(CRTC_GEN_CNTL)>>8)& 0x7;  switch(dbpp)  {    case 1: retval = 4; break;    case 2: retval = 8; break;    case 3: retval = 15; break;    case 4: retval = 16; break;    case 5: retval = 24; break;    default: retval=32; break;  }  return retval;}static int mach64_is_dbl_scan( void ){  return INREG(CRTC_GEN_CNTL) & CRTC_DBL_SCAN_EN;}static int mach64_is_interlace( void ){  return INREG(CRTC_GEN_CNTL) & CRTC_INTERLACE_EN;}static uint32_t mach64_get_xres( void ){  /* FIXME: currently we extract that from CRTC!!!*/  uint32_t xres,h_total;  h_total = INREG(CRTC_H_TOTAL_DISP);  xres = (h_total >> 16) & 0xffff;  return (xres + 1)*8;}static uint32_t mach64_get_yres( void ){  /* FIXME: currently we extract that from CRTC!!!*/  uint32_t yres,v_total;  v_total = INREG(CRTC_V_TOTAL_DISP);  yres = (v_total >> 16) & 0xffff;  return yres + 1;}// returns the verical stretch factor in 16.16static int mach64_get_vert_stretch(void){    int lcd_index;    int vert_stretching;    int ext_vert_stretch;    int ret;    int yres= mach64_get_yres();    if(!supports_lcd_v_stretch){        if(__verbose>0) printf("[mach64] vertical stretching not supported\n");        return 1<<16;    }    lcd_index= INREG(LCD_INDEX);        vert_stretching= ATIGetMach64LCDReg(LCD_VERT_STRETCHING);    if(!(vert_stretching&VERT_STRETCH_EN)) ret= 1<<16;    else    {    	int panel_size;        	ext_vert_stretch= ATIGetMach64LCDReg(LCD_EXT_VERT_STRETCH);	panel_size= (ext_vert_stretch&VERT_PANEL_SIZE)>>11;	panel_size++;		ret= ((yres<<16) + (panel_size>>1))/panel_size;    }      //    lcd_gen_ctrl = ATIGetMach64LCDReg(LCD_GEN_CNTL);        OUTREG(LCD_INDEX, lcd_index);        if(__verbose>0) printf("[mach64] vertical stretching factor= %d\n", ret);        return ret;}static void mach64_vid_make_default(){  mach64_fifo_wait(5);  OUTREG(SCALER_COLOUR_CNTL,0x00101000);  besr.ckey_on=0;  besr.graphics_key_msk=0;  besr.graphics_key_clr=0;  OUTREG(OVERLAY_GRAPHICS_KEY_MSK, besr.graphics_key_msk);  OUTREG(OVERLAY_GRAPHICS_KEY_CLR, besr.graphics_key_clr);  OUTREG(OVERLAY_KEY_CNTL,VIDEO_KEY_FN_TRUE|GRAPHIC_KEY_FN_EQ|CMP_MIX_AND);}static void mach64_vid_dump_regs( void ){  size_t i;  printf("[mach64] *** Begin of DRIVER variables dump ***\n");  printf("[mach64] mach64_mmio_base=%p\n",mach64_mmio_base);  printf("[mach64] mach64_mem_base=%p\n",mach64_mem_base);  printf("[mach64] mach64_overlay_off=%08X\n",mach64_overlay_offset);  printf("[mach64] mach64_ram_size=%08X\n",mach64_ram_size);  printf("[mach64] video mode: %ux%u@%u\n",mach64_get_xres(),mach64_get_yres(),mach64_vid_get_dbpp());  printf("[mach64] *** Begin of OV0 registers dump ***\n");  for(i=0;i<sizeof(vregs)/sizeof(video_registers_t);i++)  {	mach64_wait_for_idle();	mach64_fifo_wait(2);	printf("[mach64] %s = %08X\n",vregs[i].sname,INREG(vregs[i].name));  }  printf("[mach64] *** End of OV0 registers dump ***\n");}unsigned int VIDIX_NAME(vixGetVersion)(void){    return(VIDIX_VERSION);}typedef struct ati_chip_id_s{    unsigned short	id;    unsigned short	is_agp;}ati_chip_id_t;static ati_chip_id_t ati_card_ids[] = { { DEVICE_ATI_215CT_MACH64_CT, 0 }, { DEVICE_ATI_210888CX_MACH64_CX, 0 }, { DEVICE_ATI_210888ET_MACH64_ET, 0 }, { DEVICE_ATI_MACH64_VT, 0 }, { DEVICE_ATI_210888GX_MACH64_GX, 0 }, { DEVICE_ATI_264LT_MACH64_LT, 0 }, { DEVICE_ATI_264VT_MACH64_VT, 0 }, { DEVICE_ATI_264VT3_MACH64_VT3, 0 }, { DEVICE_ATI_264VT4_MACH64_VT4, 0 }, /**/ { DEVICE_ATI_3D_RAGE_PRO, 1 }, { DEVICE_ATI_3D_RAGE_PRO2, 1 }, { DEVICE_ATI_3D_RAGE_PRO3, 0 }, { DEVICE_ATI_3D_RAGE_PRO4, 0 }, { DEVICE_ATI_RAGE_XC, 0 }, { DEVICE_ATI_RAGE_XL_AGP, 1 }, { DEVICE_ATI_RAGE_XC_AGP, 1 }, { DEVICE_ATI_RAGE_XL, 0 }, { DEVICE_ATI_3D_RAGE_PRO5, 0 }, { DEVICE_ATI_3D_RAGE_PRO6, 0 }, { DEVICE_ATI_RAGE_XL2, 0 }, { DEVICE_ATI_RAGE_XC2, 0 }, { DEVICE_ATI_3D_RAGE_I_II, 0 }, { DEVICE_ATI_3D_RAGE_II, 0 }, { DEVICE_ATI_3D_RAGE_IIC, 1 }, { DEVICE_ATI_3D_RAGE_IIC2, 0 }, { DEVICE_ATI_3D_RAGE_IIC3, 0 }, { DEVICE_ATI_3D_RAGE_IIC4, 1 }, { DEVICE_ATI_3D_RAGE_LT, 1 }, { DEVICE_ATI_3D_RAGE_LT2, 1 }, { DEVICE_ATI_3D_RAGE_LT_G, 0 }, { DEVICE_ATI_3D_RAGE_LT3, 0 }, { DEVICE_ATI_RAGE_MOBILITY_P_M, 1 }, { DEVICE_ATI_RAGE_MOBILITY_L, 1 }, { DEVICE_ATI_3D_RAGE_LT4, 0 }, { DEVICE_ATI_3D_RAGE_LT5, 0 }, { DEVICE_ATI_RAGE_MOBILITY_P_M2, 0 }, { DEVICE_ATI_RAGE_MOBILITY_L2, 0 }};static int is_agp;static int find_chip(unsigned chip_id){  unsigned i;  for(i = 0;i < sizeof(ati_card_ids)/sizeof(ati_chip_id_t);i++)  {    if(chip_id == ati_card_ids[i].id) return i;  }  return -1;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美丝袜丝交足nylons图片| 欧美精品一区二区在线观看| 午夜久久福利影院| 久久亚洲一级片| 欧美视频在线不卡| 裸体歌舞表演一区二区| 亚洲免费资源在线播放| 久久精品亚洲精品国产欧美kt∨| 在线亚洲+欧美+日本专区| 高清不卡在线观看av| 精品国产精品一区二区夜夜嗨| 国产九九视频一区二区三区| 欧美大片在线观看一区| 欧美午夜精品久久久久久孕妇| 国产一区91精品张津瑜| 日本中文字幕一区二区视频 | 国产成人鲁色资源国产91色综| 欧美精品一区二区三区视频 | 亚洲电影欧美电影有声小说| 日韩免费性生活视频播放| 亚洲色图制服丝袜| 日韩女优电影在线观看| 国产经典欧美精品| 国产精品99久久久| 国产九色sp调教91| 粉嫩av一区二区三区在线播放| 蜜桃视频在线观看一区| 日韩精品成人一区二区在线| 日欧美一区二区| 精品一区二区综合| 国产麻豆一精品一av一免费| 国产激情一区二区三区四区| 国产成人精品免费视频网站| 波多野结衣的一区二区三区| 国产成人精品网址| 欧美最猛黑人xxxxx猛交| 欧美午夜精品一区二区蜜桃| 欧美一级片在线看| 精品久久五月天| 亚洲国产成人一区二区三区| 亚洲女子a中天字幕| 亚洲一区二区偷拍精品| 日日摸夜夜添夜夜添亚洲女人| 国产一区二区在线电影| 99re成人精品视频| 精品三级在线看| 亚洲色图.com| 日韩福利电影在线观看| 午夜一区二区三区视频| 日韩精品亚洲一区| 老司机精品视频线观看86| 裸体一区二区三区| 国产精品香蕉一区二区三区| 91美女视频网站| 欧美一二三区精品| 中文字幕在线一区免费| 日韩电影免费一区| 国产一区二区不卡| 91福利在线看| 中文字幕欧美日本乱码一线二线 | 一区二区三区中文免费| 男男gaygay亚洲| jizz一区二区| 日韩一卡二卡三卡| 亚洲精品午夜久久久| 亚洲一线二线三线久久久| 狠狠色综合播放一区二区| 在线欧美日韩精品| 国产午夜精品一区二区三区嫩草| 亚洲一区二区三区四区五区黄| 亚洲综合激情另类小说区| 日本少妇一区二区| 欧美在线影院一区二区| 国产精品国产三级国产aⅴ入口 | 天天免费综合色| 色呦呦国产精品| 久久久久久久久蜜桃| 综合自拍亚洲综合图不卡区| 国产一区二区三区香蕉| 欧美一级艳片视频免费观看| 亚洲激情成人在线| 91亚洲男人天堂| 国产女人aaa级久久久级| 精品一区二区在线观看| 日韩欧美在线网站| 秋霞av亚洲一区二区三| 欧美老年两性高潮| 亚洲色图欧洲色图婷婷| 99久久久国产精品| 久久女同性恋中文字幕| 国产一区二区伦理| 日韩午夜在线播放| 麻豆视频观看网址久久| 欧美一区二区视频观看视频| 免费成人在线观看视频| 91精品免费在线| 亚洲图片欧美一区| 欧美日韩免费高清一区色橹橹| 亚洲国产另类精品专区| 成人性生交大片免费看中文网站| 精品国产91久久久久久久妲己| 日韩成人伦理电影在线观看| 3d动漫精品啪啪| 国产美女在线精品| 中文字幕人成不卡一区| 色一情一伦一子一伦一区| 国产欧美日韩在线| 国内精品自线一区二区三区视频| 久久久精品一品道一区| av亚洲精华国产精华精华| 亚洲欧洲中文日韩久久av乱码| 色国产综合视频| 日韩在线观看一区二区| 欧美xxxxxxxx| av成人免费在线| 一区二区国产盗摄色噜噜| 4438x成人网最大色成网站| 青青国产91久久久久久| 欧美一二三在线| 成人一区二区在线观看| 一二三区精品视频| 日韩欧美一区二区久久婷婷| 国产精品一区在线观看你懂的| 国产精品不卡在线| 日韩一区二区三区视频在线| 成人国产精品免费网站| 五月婷婷综合网| 26uuu精品一区二区| 国产一区二区中文字幕| 中文字幕制服丝袜一区二区三区| av一区二区三区| 激情小说欧美图片| 夜夜嗨av一区二区三区网页 | 亚洲一区二区高清| 久久夜色精品一区| 在线观看日韩一区| 国产精品99久| 免费观看在线色综合| 亚洲精品美国一| 在线影院国内精品| 亚洲一二三级电影| 久久精品免视看| 91网站视频在线观看| 久久国产精品无码网站| 一区二区欧美国产| 国产亚洲精品福利| 欧美成人精精品一区二区频| 欧美在线一二三| 懂色av一区二区夜夜嗨| 看电视剧不卡顿的网站| 亚洲精品乱码久久久久久久久| 久久综合久久99| 欧美日韩一区不卡| 成人国产精品免费| 国产精品99久久久久久有的能看 | 一本到不卡免费一区二区| 91浏览器打开| 欧美三电影在线| 欧美日韩一区不卡| 日韩免费电影一区| 国产欧美日韩三区| 国产日产欧美一区二区视频| 欧美国产综合一区二区| 国产精品久久久久三级| 亚洲精品中文在线观看| 一区二区三区久久久| 午夜精品久久久| 国模少妇一区二区三区| 丁香网亚洲国际| 91久久一区二区| 51午夜精品国产| 精品国产一区久久| 国产精品色哟哟| 性久久久久久久久久久久| 久久国产三级精品| 成人精品鲁一区一区二区| 色噜噜狠狠成人网p站| 欧美一区二区三区四区五区 | 日韩一区二区三区精品视频| 欧美xingq一区二区| 中文字幕在线观看不卡视频| 亚洲国产精品人人做人人爽| 久久超级碰视频| a美女胸又www黄视频久久| 欧美精品123区| 中文乱码免费一区二区| 亚洲一区国产视频| 国产剧情一区在线| 欧美日韩免费电影| 国产欧美精品一区| 肉色丝袜一区二区| 9l国产精品久久久久麻豆| 欧美一级高清大全免费观看| 亚洲欧美一区二区三区国产精品| 婷婷成人综合网| 99精品视频一区二区三区| 精品嫩草影院久久| 亚洲一区二区在线观看视频| 成人亚洲精品久久久久软件| 精品少妇一区二区三区视频免付费|