⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radeon_vid.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
📖 第 1 页 / 共 4 页
字号:
/* * * radeon_vid.c * * Copyright (C) 2001 Nick Kurshev *  * BES YUV video overlay driver for Radeon/Rage128Pro/Rage128 cards *  * This software has been released under the terms of the GNU Public * license. See http://www.gnu.org/copyleft/gpl.html for details. * * This file is partly based on mga_vid and sis_vid stuff from * mplayer's package. * Also here was used code from CVS of GATOS project and X11 trees. * * SPECIAL THANKS TO: Hans-Peter Raschke for active testing and hacking * Rage128(pro) stuff of this driver. */#define RADEON_VID_VERSION "1.2.1"/*  It's entirely possible this major conflicts with something else  mknod /dev/radeon_vid c 178 0  or  mknod /dev/rage128_vid c 178 0  for Rage128/Rage128Pro chips (although it doesn't matter)  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  TESTED and WORKING formats: YUY2, UYVY, IYUV, I420, YV12  -----------------------------------------------------------  TODO:  Highest priority: fbvid.h compatibility  High priority: Fixing BUGS  Middle priority: RGB/BGR 2-32, YVU9, IF09 support  Low priority: CLPL, IYU1, IYU2, UYNV, CYUV, YUNV, YVYU, Y41P, Y211, Y41T,		      ^^^^		Y42T, V422, V655, CLJR, YUVP, UYVP, Mpeg PES (mpeg-1,2) support  ...........................................................  BUGS and LACKS:    Color and video keys don't work*/#include <linux/config.h>#include <linux/version.h>#include <linux/module.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/mm.h>#include <linux/string.h>#include <linux/errno.h>#include <linux/slab.h>#include <linux/pci.h>#include <linux/ioport.h>#include <linux/init.h>#include <linux/byteorder/swab.h>#include "radeon_vid.h"#include "radeon.h"#ifdef CONFIG_MTRR #include <asm/mtrr.h>#endif#include <asm/uaccess.h>#include <asm/system.h>#include <asm/io.h>#define TRUE 1#define FALSE 0#define RADEON_VID_MAJOR 178MODULE_AUTHOR("Nick Kurshev <nickols_k@mail.ru>");#ifdef RAGE128MODULE_DESCRIPTION("Accelerated YUV BES driver for Rage128. Version: "RADEON_VID_VERSION);#elseMODULE_DESCRIPTION("Accelerated YUV BES driver for Radeons. Version: "RADEON_VID_VERSION);#endif#ifdef MODULE_LICENSEMODULE_LICENSE("GPL");#endif#ifdef CONFIG_MTRR MODULE_PARM(mtrr, "i");MODULE_PARM_DESC(mtrr, "Tune MTRR (touch=1(default))");static int mtrr __initdata = 1;static struct { int vram; int vram_valid; } smtrr;#endifMODULE_PARM(swap_fourcc, "i");MODULE_PARM_DESC(swap_fourcc, "Swap fourcc (don't swap=0(default))");static int swap_fourcc __initdata = 0;#ifdef RAGE128#define RVID_MSG "rage128_vid: "#define X_ADJUST 0#else#define RVID_MSG "radeon_vid: "#define X_ADJUST 8#ifndef RADEON#define RADEON#endif#endif#undef DEBUG#if DEBUG#define RTRACE		printk#else#define RTRACE(...)	((void)0)#endif#ifndef min#define min(a,b) (a < b ? a : b)#endif#ifndef RAGE128#if defined(__i386__)/* Ugly but only way */#undef AVOID_FPUstatic double inline __FastSin(double x) {   register double res;   __asm __volatile("fsin":"=t"(res):"0"(x));   return res;}#undef sin#define sin(x) __FastSin(x)static double inline __FastCos(double x) {   register double res;   __asm __volatile("fcos":"=t"(res):"0"(x));   return res;}#undef cos#define cos(x) __FastCos(x)#else#include "generic_math.h"#endif /*__386__*/#endif /*RAGE128*/#if !defined( RAGE128 ) && !defined( AVOID_FPU )#define RADEON_FPU 1#endiftypedef struct bes_registers_s{  /* base address of yuv framebuffer */  uint32_t yuv_base;  uint32_t fourcc;  uint32_t dest_bpp;  /* YUV BES registers */  uint32_t reg_load_cntl;  uint32_t h_inc;  uint32_t step_by;  uint32_t y_x_start;  uint32_t y_x_end;  uint32_t v_inc;  uint32_t p1_blank_lines_at_top;  uint32_t p23_blank_lines_at_top;  uint32_t vid_buf_pitch0_value;  uint32_t vid_buf_pitch1_value;  uint32_t p1_x_start_end;  uint32_t p2_x_start_end;  uint32_t p3_x_start_end;  uint32_t base_addr;  uint32_t vid_buf0_base_adrs;  /* These ones are for auto flip: maybe in the future */  uint32_t vid_buf1_base_adrs;  uint32_t vid_buf2_base_adrs;  uint32_t vid_buf3_base_adrs;  uint32_t vid_buf4_base_adrs;  uint32_t vid_buf5_base_adrs;  uint32_t p1_v_accum_init;  uint32_t p1_h_accum_init;  uint32_t p23_v_accum_init;  uint32_t p23_h_accum_init;  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 double_buff;    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;typedef struct video_registers_s{#ifdef DEBUG  const char * sname;#endif  uint32_t name;  uint32_t value;}video_registers_t;static bes_registers_t besr;#ifndef RAGE128static int IsR200=0;#endif#ifdef DEBUG#define DECLARE_VREG(name) { #name, name, 0 }#else#define DECLARE_VREG(name) { name, 0 }#endif#ifdef DEBUGstatic video_registers_t vregs[] = {  DECLARE_VREG(VIDEOMUX_CNTL),  DECLARE_VREG(VIPPAD_MASK),  DECLARE_VREG(VIPPAD1_A),  DECLARE_VREG(VIPPAD1_EN),  DECLARE_VREG(VIPPAD1_Y),  DECLARE_VREG(OV0_Y_X_START),  DECLARE_VREG(OV0_Y_X_END),  DECLARE_VREG(OV0_PIPELINE_CNTL),  DECLARE_VREG(OV0_EXCLUSIVE_HORZ),  DECLARE_VREG(OV0_EXCLUSIVE_VERT),  DECLARE_VREG(OV0_REG_LOAD_CNTL),  DECLARE_VREG(OV0_SCALE_CNTL),  DECLARE_VREG(OV0_V_INC),  DECLARE_VREG(OV0_P1_V_ACCUM_INIT),  DECLARE_VREG(OV0_P23_V_ACCUM_INIT),  DECLARE_VREG(OV0_P1_BLANK_LINES_AT_TOP),  DECLARE_VREG(OV0_P23_BLANK_LINES_AT_TOP),#ifdef RADEON  DECLARE_VREG(OV0_BASE_ADDR),#endif  DECLARE_VREG(OV0_VID_BUF0_BASE_ADRS),  DECLARE_VREG(OV0_VID_BUF1_BASE_ADRS),  DECLARE_VREG(OV0_VID_BUF2_BASE_ADRS),  DECLARE_VREG(OV0_VID_BUF3_BASE_ADRS),  DECLARE_VREG(OV0_VID_BUF4_BASE_ADRS),  DECLARE_VREG(OV0_VID_BUF5_BASE_ADRS),  DECLARE_VREG(OV0_VID_BUF_PITCH0_VALUE),  DECLARE_VREG(OV0_VID_BUF_PITCH1_VALUE),  DECLARE_VREG(OV0_AUTO_FLIP_CNTL),  DECLARE_VREG(OV0_DEINTERLACE_PATTERN),  DECLARE_VREG(OV0_SUBMIT_HISTORY),  DECLARE_VREG(OV0_H_INC),  DECLARE_VREG(OV0_STEP_BY),  DECLARE_VREG(OV0_P1_H_ACCUM_INIT),  DECLARE_VREG(OV0_P23_H_ACCUM_INIT),  DECLARE_VREG(OV0_P1_X_START_END),  DECLARE_VREG(OV0_P2_X_START_END),  DECLARE_VREG(OV0_P3_X_START_END),  DECLARE_VREG(OV0_FILTER_CNTL),  DECLARE_VREG(OV0_FOUR_TAP_COEF_0),  DECLARE_VREG(OV0_FOUR_TAP_COEF_1),  DECLARE_VREG(OV0_FOUR_TAP_COEF_2),  DECLARE_VREG(OV0_FOUR_TAP_COEF_3),  DECLARE_VREG(OV0_FOUR_TAP_COEF_4),  DECLARE_VREG(OV0_FLAG_CNTL),#ifdef RAGE128  DECLARE_VREG(OV0_COLOUR_CNTL),#else  DECLARE_VREG(OV0_SLICE_CNTL),#endif  DECLARE_VREG(OV0_VID_KEY_CLR),  DECLARE_VREG(OV0_VID_KEY_MSK),  DECLARE_VREG(OV0_GRAPHICS_KEY_CLR),  DECLARE_VREG(OV0_GRAPHICS_KEY_MSK),  DECLARE_VREG(OV0_KEY_CNTL),  DECLARE_VREG(OV0_TEST),  DECLARE_VREG(OV0_LIN_TRANS_A),  DECLARE_VREG(OV0_LIN_TRANS_B),  DECLARE_VREG(OV0_LIN_TRANS_C),  DECLARE_VREG(OV0_LIN_TRANS_D),  DECLARE_VREG(OV0_LIN_TRANS_E),  DECLARE_VREG(OV0_LIN_TRANS_F),  DECLARE_VREG(OV0_GAMMA_0_F),  DECLARE_VREG(OV0_GAMMA_10_1F),  DECLARE_VREG(OV0_GAMMA_20_3F),  DECLARE_VREG(OV0_GAMMA_40_7F),  DECLARE_VREG(OV0_GAMMA_380_3BF),  DECLARE_VREG(OV0_GAMMA_3C0_3FF),  DECLARE_VREG(SUBPIC_CNTL),  DECLARE_VREG(SUBPIC_DEFCOLCON),  DECLARE_VREG(SUBPIC_Y_X_START),  DECLARE_VREG(SUBPIC_Y_X_END),  DECLARE_VREG(SUBPIC_V_INC),  DECLARE_VREG(SUBPIC_H_INC),  DECLARE_VREG(SUBPIC_BUF0_OFFSET),  DECLARE_VREG(SUBPIC_BUF1_OFFSET),  DECLARE_VREG(SUBPIC_LC0_OFFSET),  DECLARE_VREG(SUBPIC_LC1_OFFSET),  DECLARE_VREG(SUBPIC_PITCH),  DECLARE_VREG(SUBPIC_BTN_HLI_COLCON),  DECLARE_VREG(SUBPIC_BTN_HLI_Y_X_START),  DECLARE_VREG(SUBPIC_BTN_HLI_Y_X_END),  DECLARE_VREG(SUBPIC_PALETTE_INDEX),  DECLARE_VREG(SUBPIC_PALETTE_DATA),  DECLARE_VREG(SUBPIC_H_ACCUM_INIT),  DECLARE_VREG(SUBPIC_V_ACCUM_INIT),  DECLARE_VREG(IDCT_RUNS),  DECLARE_VREG(IDCT_LEVELS),  DECLARE_VREG(IDCT_AUTH_CONTROL),  DECLARE_VREG(IDCT_AUTH),  DECLARE_VREG(IDCT_CONTROL)};#endifstatic uint32_t radeon_vid_in_use = 0;static uint8_t *radeon_mmio_base = 0;static uint32_t radeon_mem_base = 0; static int32_t radeon_overlay_off = 0;static uint32_t radeon_ram_size = 0;#define PARAM_BUFF_SIZE 4096static uint8_t *radeon_param_buff = NULL;static uint32_t radeon_param_buff_size=0;static uint32_t radeon_param_buff_len=0; /* real length of buffer */static mga_vid_config_t radeon_config; static char *fourcc_format_name(int format){    switch(format)    {	case IMGFMT_RGB8: return("RGB 8-bit");	case IMGFMT_RGB15: return("RGB 15-bit");	case IMGFMT_RGB16: return("RGB 16-bit");	case IMGFMT_RGB24: return("RGB 24-bit");	case IMGFMT_RGB32: return("RGB 32-bit");	case IMGFMT_BGR8: return("BGR 8-bit");	case IMGFMT_BGR15: return("BGR 15-bit");	case IMGFMT_BGR16: return("BGR 16-bit");	case IMGFMT_BGR24: return("BGR 24-bit");	case IMGFMT_BGR32: return("BGR 32-bit");	case IMGFMT_YVU9: return("Planar YVU9");	case IMGFMT_IF09: return("Planar IF09");	case IMGFMT_YV12: return("Planar YV12");	case IMGFMT_I420: return("Planar I420");	case IMGFMT_IYUV: return("Planar IYUV");	case IMGFMT_CLPL: return("Planar CLPL");	case IMGFMT_Y800: return("Planar Y800");	case IMGFMT_Y8: return("Planar Y8");	case IMGFMT_IUYV: return("Packed IUYV");	case IMGFMT_IY41: return("Packed IY41");	case IMGFMT_IYU1: return("Packed IYU1");	case IMGFMT_IYU2: return("Packed IYU2");	case IMGFMT_UYNV: return("Packed UYNV");	case IMGFMT_cyuv: return("Packed CYUV");	case IMGFMT_Y422: return("Packed Y422");	case IMGFMT_YUY2: return("Packed YUY2");	case IMGFMT_YUNV: return("Packed YUNV");	case IMGFMT_UYVY: return("Packed UYVY");//	case IMGFMT_YVYU: return("Packed YVYU");	case IMGFMT_Y41P: return("Packed Y41P");	case IMGFMT_Y211: return("Packed Y211");	case IMGFMT_Y41T: return("Packed Y41T");	case IMGFMT_Y42T: return("Packed Y42T");	case IMGFMT_V422: return("Packed V422");	case IMGFMT_V655: return("Packed V655");	case IMGFMT_CLJR: return("Packed CLJR");	case IMGFMT_YUVP: return("Packed YUVP");	case IMGFMT_UYVP: return("Packed UYVP");	case IMGFMT_MPEGPES: return("Mpeg PES");    }    return("Unknown");}/* * IO macros */#define INREG8(addr)		readb((radeon_mmio_base)+addr)#define OUTREG8(addr,val)	writeb(val, (radeon_mmio_base)+addr)#define INREG(addr)		readl((radeon_mmio_base)+addr)#define OUTREG(addr,val)	writel(val, (radeon_mmio_base)+addr)#define OUTREGP(addr,val,mask)  					\	do {								\		unsigned int _tmp = INREG(addr);			\		_tmp &= (mask);						\		_tmp |= (val);						\		OUTREG(addr, _tmp);					\

⌨️ 快捷键说明

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