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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sisusb_init.c

?? linux內核源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * sisusb - usb kernel driver for SiS315(E) based USB2VGA dongles * * Display mode initializing code * * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria * * If distributed as part of the Linux kernel, this code is licensed under the * terms of the GPL v2. * * Otherwise, the following license terms apply: * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions * * are met: * * 1) Redistributions of source code must retain the above copyright * *    notice, this list of conditions and the following disclaimer. * * 2) Redistributions in binary form must reproduce the above copyright * *    notice, this list of conditions and the following disclaimer in the * *    documentation and/or other materials provided with the distribution. * * 3) The name of the author may not be used to endorse or promote products * *    derived from this software without specific prior written permission. * * * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Author:	Thomas Winischhofer <thomas@winischhofer.net> * */#include <linux/module.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/poll.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/spinlock.h>#include <linux/kref.h>#include "sisusb.h"#ifdef INCL_SISUSB_CON#include "sisusb_init.h"/*********************************************//*         POINTER INITIALIZATION            *//*********************************************/static void SiSUSB_InitPtr(struct SiS_Private *SiS_Pr){	SiS_Pr->SiS_ModeResInfo = SiSUSB_ModeResInfo;	SiS_Pr->SiS_StandTable = SiSUSB_StandTable;	SiS_Pr->SiS_SModeIDTable = SiSUSB_SModeIDTable;	SiS_Pr->SiS_EModeIDTable = SiSUSB_EModeIDTable;	SiS_Pr->SiS_RefIndex = SiSUSB_RefIndex;	SiS_Pr->SiS_CRT1Table = SiSUSB_CRT1Table;	SiS_Pr->SiS_VCLKData = SiSUSB_VCLKData;}/*********************************************//*          HELPER: SetReg, GetReg           *//*********************************************/static voidSiS_SetReg(struct SiS_Private *SiS_Pr, unsigned long port,	   unsigned short index, unsigned short data){	sisusb_setidxreg(SiS_Pr->sisusb, port, index, data);}static voidSiS_SetRegByte(struct SiS_Private *SiS_Pr, unsigned long port,	       unsigned short data){	sisusb_setreg(SiS_Pr->sisusb, port, data);}static unsigned charSiS_GetReg(struct SiS_Private *SiS_Pr, unsigned long port, unsigned short index){	u8 data;	sisusb_getidxreg(SiS_Pr->sisusb, port, index, &data);	return data;}static unsigned charSiS_GetRegByte(struct SiS_Private *SiS_Pr, unsigned long port){	u8 data;	sisusb_getreg(SiS_Pr->sisusb, port, &data);	return data;}static voidSiS_SetRegANDOR(struct SiS_Private *SiS_Pr, unsigned long port,		unsigned short index, unsigned short DataAND,		unsigned short DataOR){	sisusb_setidxregandor(SiS_Pr->sisusb, port, index, DataAND, DataOR);}static voidSiS_SetRegAND(struct SiS_Private *SiS_Pr, unsigned long port,	      unsigned short index, unsigned short DataAND){	sisusb_setidxregand(SiS_Pr->sisusb, port, index, DataAND);}static voidSiS_SetRegOR(struct SiS_Private *SiS_Pr, unsigned long port,	     unsigned short index, unsigned short DataOR){	sisusb_setidxregor(SiS_Pr->sisusb, port, index, DataOR);}/*********************************************//*      HELPER: DisplayOn, DisplayOff        *//*********************************************/static void SiS_DisplayOn(struct SiS_Private *SiS_Pr){	SiS_SetRegAND(SiS_Pr, SiS_Pr->SiS_P3c4, 0x01, 0xDF);}/*********************************************//*        HELPER: Init Port Addresses        *//*********************************************/static void SiSUSBRegInit(struct SiS_Private *SiS_Pr, unsigned long BaseAddr){	SiS_Pr->SiS_P3c4 = BaseAddr + 0x14;	SiS_Pr->SiS_P3d4 = BaseAddr + 0x24;	SiS_Pr->SiS_P3c0 = BaseAddr + 0x10;	SiS_Pr->SiS_P3ce = BaseAddr + 0x1e;	SiS_Pr->SiS_P3c2 = BaseAddr + 0x12;	SiS_Pr->SiS_P3ca = BaseAddr + 0x1a;	SiS_Pr->SiS_P3c6 = BaseAddr + 0x16;	SiS_Pr->SiS_P3c7 = BaseAddr + 0x17;	SiS_Pr->SiS_P3c8 = BaseAddr + 0x18;	SiS_Pr->SiS_P3c9 = BaseAddr + 0x19;	SiS_Pr->SiS_P3cb = BaseAddr + 0x1b;	SiS_Pr->SiS_P3cc = BaseAddr + 0x1c;	SiS_Pr->SiS_P3cd = BaseAddr + 0x1d;	SiS_Pr->SiS_P3da = BaseAddr + 0x2a;	SiS_Pr->SiS_Part1Port = BaseAddr + SIS_CRT2_PORT_04;}/*********************************************//*             HELPER: GetSysFlags           *//*********************************************/static void SiS_GetSysFlags(struct SiS_Private *SiS_Pr){	SiS_Pr->SiS_MyCR63 = 0x63;}/*********************************************//*         HELPER: Init PCI & Engines        *//*********************************************/static void SiSInitPCIetc(struct SiS_Private *SiS_Pr){	SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3c4, 0x20, 0xa1);	/*  - Enable 2D (0x40)	 *  - Enable 3D (0x02)	 *  - Enable 3D vertex command fetch (0x10)	 *  - Enable 3D command parser (0x08)	 *  - Enable 3D G/L transformation engine (0x80)	 */	SiS_SetRegOR(SiS_Pr, SiS_Pr->SiS_P3c4, 0x1E, 0xDA);}/*********************************************//*        HELPER: SET SEGMENT REGISTERS      *//*********************************************/static void SiS_SetSegRegLower(struct SiS_Private *SiS_Pr, unsigned short value){	unsigned short temp;	value &= 0x00ff;	temp = SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3cb) & 0xf0;	temp |= (value >> 4);	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3cb, temp);	temp = SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3cd) & 0xf0;	temp |= (value & 0x0f);	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3cd, temp);}static void SiS_SetSegRegUpper(struct SiS_Private *SiS_Pr, unsigned short value){	unsigned short temp;	value &= 0x00ff;	temp = SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3cb) & 0x0f;	temp |= (value & 0xf0);	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3cb, temp);	temp = SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3cd) & 0x0f;	temp |= (value << 4);	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3cd, temp);}static void SiS_SetSegmentReg(struct SiS_Private *SiS_Pr, unsigned short value){	SiS_SetSegRegLower(SiS_Pr, value);	SiS_SetSegRegUpper(SiS_Pr, value);}static void SiS_ResetSegmentReg(struct SiS_Private *SiS_Pr){	SiS_SetSegmentReg(SiS_Pr, 0);}static voidSiS_SetSegmentRegOver(struct SiS_Private *SiS_Pr, unsigned short value){	unsigned short temp = value >> 8;	temp &= 0x07;	temp |= (temp << 4);	SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3c4, 0x1d, temp);	SiS_SetSegmentReg(SiS_Pr, value);}static void SiS_ResetSegmentRegOver(struct SiS_Private *SiS_Pr){	SiS_SetSegmentRegOver(SiS_Pr, 0);}static void SiS_ResetSegmentRegisters(struct SiS_Private *SiS_Pr){	SiS_ResetSegmentReg(SiS_Pr);	SiS_ResetSegmentRegOver(SiS_Pr);}/*********************************************//*           HELPER: SearchModeID            *//*********************************************/static intSiS_SearchModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo,		 unsigned short *ModeIdIndex){	if ((*ModeNo) <= 0x13) {		if ((*ModeNo) != 0x03)			return 0;		(*ModeIdIndex) = 0;	} else {		for (*ModeIdIndex = 0;; (*ModeIdIndex)++) {			if (SiS_Pr->SiS_EModeIDTable[*ModeIdIndex].Ext_ModeID ==			    (*ModeNo))				break;			if (SiS_Pr->SiS_EModeIDTable[*ModeIdIndex].Ext_ModeID ==			    0xFF)				return 0;		}	}	return 1;}/*********************************************//*            HELPER: ENABLE CRT1            *//*********************************************/static void SiS_HandleCRT1(struct SiS_Private *SiS_Pr){	/* Enable CRT1 gating */	SiS_SetRegAND(SiS_Pr, SiS_Pr->SiS_P3d4, SiS_Pr->SiS_MyCR63, 0xbf);}/*********************************************//*           HELPER: GetColorDepth           *//*********************************************/static unsigned shortSiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo,		  unsigned short ModeIdIndex){	static const unsigned short ColorDepth[6] = { 1, 2, 4, 4, 6, 8 };	unsigned short modeflag;	short index;	if (ModeNo <= 0x13) {		modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;	} else {		modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;	}	index = (modeflag & ModeTypeMask) - ModeEGA;	if (index < 0)		index = 0;	return ColorDepth[index];}/*********************************************//*             HELPER: GetOffset             *//*********************************************/static unsigned shortSiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo,	      unsigned short ModeIdIndex, unsigned short rrti){	unsigned short xres, temp, colordepth, infoflag;	infoflag = SiS_Pr->SiS_RefIndex[rrti].Ext_InfoFlag;	xres = SiS_Pr->SiS_RefIndex[rrti].XRes;	colordepth = SiS_GetColorDepth(SiS_Pr, ModeNo, ModeIdIndex);	temp = xres / 16;	if (infoflag & InterlaceMode)		temp <<= 1;	temp *= colordepth;	if (xres % 16)		temp += (colordepth >> 1);	return temp;}/*********************************************//*                   SEQ                     *//*********************************************/static voidSiS_SetSeqRegs(struct SiS_Private *SiS_Pr, unsigned short StandTableIndex){	unsigned char SRdata;	int i;	SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3c4, 0x00, 0x03);	SRdata = SiS_Pr->SiS_StandTable[StandTableIndex].SR[0] | 0x20;	SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3c4, 0x01, SRdata);	for (i = 2; i <= 4; i++) {		SRdata = SiS_Pr->SiS_StandTable[StandTableIndex].SR[i - 1];		SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3c4, i, SRdata);	}}/*********************************************//*                  MISC                     *//*********************************************/static voidSiS_SetMiscRegs(struct SiS_Private *SiS_Pr, unsigned short StandTableIndex){	unsigned char Miscdata = SiS_Pr->SiS_StandTable[StandTableIndex].MISC;	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3c2, Miscdata);}/*********************************************//*                  CRTC                     *//*********************************************/static voidSiS_SetCRTCRegs(struct SiS_Private *SiS_Pr, unsigned short StandTableIndex){	unsigned char CRTCdata;	unsigned short i;	SiS_SetRegAND(SiS_Pr, SiS_Pr->SiS_P3d4, 0x11, 0x7f);	for (i = 0; i <= 0x18; i++) {		CRTCdata = SiS_Pr->SiS_StandTable[StandTableIndex].CRTC[i];		SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3d4, i, CRTCdata);	}}/*********************************************//*                   ATT                     *//*********************************************/static voidSiS_SetATTRegs(struct SiS_Private *SiS_Pr, unsigned short StandTableIndex){	unsigned char ARdata;	unsigned short i;	for (i = 0; i <= 0x13; i++) {		ARdata = SiS_Pr->SiS_StandTable[StandTableIndex].ATTR[i];		SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3da);		SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3c0, i);		SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3c0, ARdata);	}	SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3da);	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3c0, 0x14);	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3c0, 0x00);	SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3da);	SiS_SetRegByte(SiS_Pr, SiS_Pr->SiS_P3c0, 0x20);	SiS_GetRegByte(SiS_Pr, SiS_Pr->SiS_P3da);}/*********************************************//*                   GRC                     *//*********************************************/static voidSiS_SetGRCRegs(struct SiS_Private *SiS_Pr, unsigned short StandTableIndex){	unsigned char GRdata;	unsigned short i;	for (i = 0; i <= 0x08; i++) {		GRdata = SiS_Pr->SiS_StandTable[StandTableIndex].GRC[i];		SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3ce, i, GRdata);	}	if (SiS_Pr->SiS_ModeType > ModeVGA) {		/* 256 color disable */		SiS_SetRegAND(SiS_Pr, SiS_Pr->SiS_P3ce, 0x05, 0xBF);	}}/*********************************************//*          CLEAR EXTENDED REGISTERS         *//*********************************************/static void SiS_ClearExt1Regs(struct SiS_Private *SiS_Pr, unsigned short ModeNo){	int i;	for (i = 0x0A; i <= 0x0E; i++) {		SiS_SetReg(SiS_Pr, SiS_Pr->SiS_P3c4, i, 0x00);	}	SiS_SetRegAND(SiS_Pr, SiS_Pr->SiS_P3c4, 0x37, 0xFE);}/*********************************************//*              Get rate index               *//*********************************************/static unsigned shortSiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,	       unsigned short ModeIdIndex){	unsigned short rrti, i, index, temp;	if (ModeNo <= 0x13)		return 0xFFFF;	index = SiS_GetReg(SiS_Pr, SiS_Pr->SiS_P3d4, 0x33) & 0x0F;	if (index > 0)		index--;	rrti = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;	ModeNo = SiS_Pr->SiS_RefIndex[rrti].ModeID;	i = 0;	do {		if (SiS_Pr->SiS_RefIndex[rrti + i].ModeID != ModeNo)			break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜视频福利| 欧美日韩一区三区| 午夜精品成人在线| 久久亚洲精品国产精品紫薇| 欧美在线999| caoporm超碰国产精品| 免费在线观看成人| 亚洲一区二区三区自拍| 欧美韩国一区二区| 精品久久一区二区| 欧美日韩国产高清一区| 91在线观看美女| 国产精品综合在线视频| 偷拍一区二区三区| 伊人婷婷欧美激情| 午夜视频在线观看一区| 亚洲精品乱码久久久久久久久| 精品久久久三级丝袜| 91精品一区二区三区在线观看| 91啪亚洲精品| 成人午夜av影视| 国产成人久久精品77777最新版本| 麻豆91精品视频| 日本视频在线一区| 午夜精品久久久久影视| 亚洲一区二区三区在线看| 亚洲免费观看高清完整版在线| 国产欧美精品一区二区三区四区 | 日韩亚洲欧美在线观看| 在线看日本不卡| 一本久久a久久免费精品不卡| a在线欧美一区| 成人午夜电影久久影院| 成人动漫在线一区| av在线不卡电影| 99久久婷婷国产综合精品电影| 国产精品一区一区三区| 国产精品系列在线播放| 国产麻豆一精品一av一免费| 国产一二三精品| 国产成人精品免费网站| av一本久道久久综合久久鬼色| 成a人片亚洲日本久久| bt欧美亚洲午夜电影天堂| 午夜精品久久久久久久| www亚洲一区| 日韩一卡二卡三卡四卡| 日韩一卡二卡三卡四卡| 久久综合色婷婷| 国产丝袜欧美中文另类| 国产欧美日韩综合精品一区二区| 国产日韩欧美精品一区| 久久久久免费观看| 丝袜美腿亚洲色图| 麻豆一区二区三区| 欧美一级高清大全免费观看| 国产一区二区三区电影在线观看| 亚洲第一av色| 老司机免费视频一区二区| 久久成人18免费观看| 国产精品影音先锋| 99久久精品国产精品久久 | 欧美性高清videossexo| 欧美精品粉嫩高潮一区二区| 欧美精品久久天天躁| 精品久久久久久综合日本欧美| 国产人妖乱国产精品人妖| 国产亚洲一二三区| 一区二区三区四区乱视频| 日本视频在线一区| 成人动漫中文字幕| 欧美羞羞免费网站| 精品久久久久久久久久久久久久久久久 | 91日韩在线专区| 在线看日韩精品电影| 日韩亚洲欧美在线| 国产精品不卡在线观看| 亚洲一区二区三区四区五区中文 | 色天使色偷偷av一区二区| 欧美日韩在线播放| 久久综合av免费| 一区二区三区在线视频观看| 久久se这里有精品| 色嗨嗨av一区二区三区| 26uuu国产日韩综合| 亚洲精品你懂的| 国内一区二区在线| 欧美亚洲综合久久| 中文欧美字幕免费| 丝袜美腿成人在线| 99精品视频中文字幕| 91精品国产综合久久小美女| 国产精品麻豆视频| 久久99精品久久久久婷婷| 色一情一伦一子一伦一区| 久久久无码精品亚洲日韩按摩| 亚洲一区视频在线| www.亚洲在线| 久久色在线观看| 午夜激情一区二区三区| 不卡的av中国片| 欧美大片一区二区| 天堂一区二区在线免费观看| 97久久超碰国产精品| 久久综合九色欧美综合狠狠| 日韩电影一区二区三区四区| 91美女片黄在线| 久久久久久久综合色一本| 麻豆视频一区二区| 91精品国产综合久久久久久久| 亚洲视频在线一区| 国产成人综合在线观看| 日韩一区二区三区在线观看| 亚洲影院在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 蜜臀av性久久久久蜜臀aⅴ| 色又黄又爽网站www久久| 日本一区二区免费在线观看视频| 免费不卡在线观看| 91精品国产高清一区二区三区蜜臀| 亚洲综合一区二区| 国产欧美一区二区精品忘忧草| 视频在线观看91| 欧美日韩精品欧美日韩精品| 亚洲欧美日韩人成在线播放| 成人av一区二区三区| 国产日韩欧美激情| 国产传媒一区在线| 国产拍揄自揄精品视频麻豆| 国产在线乱码一区二区三区| 欧美大片在线观看一区二区| 久久精品国产精品亚洲红杏| 在线不卡的av| 美女任你摸久久| 日韩免费性生活视频播放| 美女在线视频一区| 久久综合久久综合九色| 狠狠久久亚洲欧美| 久久久不卡网国产精品二区| 国产原创一区二区| 中文字幕va一区二区三区| 成人免费视频播放| 亚洲欧美成aⅴ人在线观看| 日本韩国欧美国产| 亚洲成av人片一区二区梦乃| 欧美日韩一区在线观看| 日韩精品一二三区| 欧美成人一区二区三区在线观看| 久久精品国产99久久6| 国产亚洲精品中文字幕| 成人小视频免费在线观看| 亚洲人成网站在线| 欧美高清视频在线高清观看mv色露露十八 | 9久草视频在线视频精品| 国产精品久久久久久久久免费桃花 | www.av亚洲| 一区二区三区四区亚洲| 欧美一区二区三区日韩| 国产在线不卡视频| 椎名由奈av一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 一区二区成人在线| 日韩欧美成人午夜| 国产精品69毛片高清亚洲| 亚洲人123区| 欧美一区二区久久久| 国产精品夜夜爽| 亚洲免费大片在线观看| 欧美一区二区三区视频在线观看| 国产精品99久久久久| 夜夜嗨av一区二区三区| 日韩欧美黄色影院| 成人国产亚洲欧美成人综合网| 一级日本不卡的影视| 精品成人私密视频| 一本一道综合狠狠老| 蜜臀91精品一区二区三区 | 国产乱码精品一区二区三区五月婷| 中文字幕欧美日韩一区| 欧美精品99久久久**| 菠萝蜜视频在线观看一区| 日韩国产精品久久久久久亚洲| 久久精品亚洲国产奇米99| 在线免费av一区| 国产福利一区二区三区视频| 性欧美疯狂xxxxbbbb| 国产精品私人影院| 日韩午夜中文字幕| 日本久久一区二区| 国产盗摄一区二区| 亚洲成年人影院| 国产精品乱码人人做人人爱| 日韩欧美一级二级三级| 欧美在线视频不卡| 成人激情校园春色| 国产一区二区精品在线观看| 丝袜美腿亚洲一区二区图片| 亚洲女女做受ⅹxx高潮| 亚洲国产成人午夜在线一区| 日韩免费观看高清完整版|