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

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

?? sticon-bmode.c

?? linux下的VIDEO接口驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*TPG CVS users: please don't commit changes to this file directly, sendthem to prumpf@tux.org and wait for a new version instead.  Otherwise,your changes will get lost when prumpf releases the next version, asthis file *will* be replaced with it.  You have been warned.2000-05-30, <deller@gmx.de>*/#if 1#define DPRINTK(x)	printk x#else#define DPRINTK(x)#endif/* *  linux/drivers/video/sticon.c  - console driver using HP's STI firmware * *	Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> * *  Based on linux/drivers/video/vgacon.c and linux/drivers/video/fbcon.c, *  which were * *	Created 28 Sep 1997 by Geert Uytterhoeven *	Rewritten by Martin Mares <mj@ucw.cz>, July 1998 *	Copyright (C) 1991, 1992  Linus Torvalds *			    1995  Jay Estabrook *	Copyright (C) 1995 Geert Uytterhoeven *	Copyright (C) 1993 Bjoern Brauel *			   Roman Hodek *	Copyright (C) 1993 Hamish Macdonald *			   Greg Harp *	Copyright (C) 1994 David Carter [carter@compsci.bristol.ac.uk] * *	      with work by William Rucklidge (wjr@cs.cornell.edu) *			   Geert Uytterhoeven *			   Jes Sorensen (jds@kom.auc.dk) *			   Martin Apel *	      with work by Guenther Kelleter *			   Martin Schaller *			   Andreas Schwab *			   Emmanuel Marty (core@ggi-project.org) *			   Jakub Jelinek (jj@ultra.linux.cz) *			   Martin Mares <mj@ucw.cz> * *  This file is subject to the terms and conditions of the GNU General Public *  License.  See the file COPYING in the main directory of this archive for *  more details. *//* *  TODO: *   - call STI in virtual mode rather than in real mode *   - support for PCI-only STI ROMs (which don't have a traditional region *     list) *   - safe detection (i.e. verify there is a graphics device at a given *     address first, not just read a random device's io space) *   - support for multiple STI devices in one machine *   - support for byte-mode STI ROMs *   - support for just using STI to switch to a colour fb (stifb ?) *   - try to make it work on m68k hp workstations ;) */#include <linux/types.h>#include <linux/sched.h>#include <linux/fs.h>#include <linux/kernel.h>#include <linux/tty.h>#include <linux/console.h>#include <linux/string.h>#include <linux/kd.h>#include <linux/slab.h>#include <linux/vt_kern.h>#include <linux/selection.h>#include <linux/ioport.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/io.h>#include <asm/real.h>#include <linux/module.h>#include <linux/fb.h>#include <linux/smp.h>#include <asm/irq.h>#include <asm/system.h>#include <asm/uaccess.h>#include <video/fbcon.h>#include <video/font.h>#include "sti-bmode.h"/* The latency of the STI functions cannot really be reduced by setting * this to 0;  STI doesn't seem to be designed to allow calling a different * function (or the same function with different arguments) after a * function exited with 1 as return value. * * As all of the functions below could be called from interrupt context, * we have to spin_lock_irqsave around the do { ret = bla(); } while(ret==1) * block.  Really bad latency there. * * Probably the best solution to all this is have the generic code manage * the screen buffer and a kernel thread to call STI occasionally. *  * Luckily, the frame buffer guys have the same problem so we can just wait * for them to fix it and steal their solution.   prumpf * * Actually, another long-term viable solution is to completely do STI * support in userspace - that way we avoid the potential license issues * of using proprietary fonts, too. */ #define STI_WAIT 1#define STI_PTR(p) ( (typeof(p)) virt_to_phys(p))#define PTR_STI(p) ( (typeof(p)) phys_to_virt((unsigned long)p) )static struct sti_struct default_sti = {	SPIN_LOCK_UNLOCKED,};static struct sti_font_flags default_font_flags = {	STI_WAIT, 0, 0, NULL};/* The colour indices used by STI are *   0 - Black *   1 - White *   2 - Red *   3 - Yellow/Brown *   4 - Green *   5 - Cyan *   6 - Blue *   7 - Magenta * * So we have the same colours as VGA (basically one bit each for R, G, B), * but have to translate them, anyway. */static u8 col_trans[8] = {        0, 6, 4, 5,        2, 7, 3, 1};#define c_fg(sti, c) col_trans[((c>> 8) & 7)]#define c_bg(sti, c) col_trans[((c>>11) & 7)]#define c_index(sti, c) (c&0xff)#define sti_onscreen_x(sti) (PTR_STI(sti->glob_cfg)->onscreen_x)#define sti_onscreen_y(sti) (PTR_STI(sti->glob_cfg)->onscreen_y)#define sti_font_x(sti) (STI_U8(PTR_STI(sti->font)->width))#define sti_font_y(sti) (STI_U8(PTR_STI(sti->font)->height))static struct sti_init_flags default_init_flags = {	STI_WAIT, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, NULL};static void sti_init_graph(struct sti_struct *sti) {	struct sti_init_inptr_ext inptr_ext = {		0, { 0 }, 0, NULL	};	struct sti_init_inptr inptr = {		3, STI_PTR(&inptr_ext)	};	struct sti_init_outptr outptr = { 0 };	unsigned long flags;	s32 ret;	spin_lock_irqsave(&sti->lock, flags);	ret = STI_CALL(sti->init_graph, &default_init_flags, &inptr,		&outptr, sti->glob_cfg);	spin_unlock_irqrestore(&sti->lock, flags);	sti->text_planes = outptr.text_planes;}#if 0static struct sti_conf_flags default_conf_flags = {	STI_WAIT, 0, NULL};static void sti_inq_conf(struct sti_struct *sti){	struct sti_conf_inptr inptr = { NULL };	struct sti_conf_outptr_ext outptr_ext = { future_ptr: NULL };	struct sti_conf_outptr outptr = {		ext_ptr: STI_PTR(&outptr_ext)	};	unsigned long flags;	s32 ret;		do {		spin_lock_irqsave(&sti->lock, flags);		ret = STI_CALL(sti->inq_conf, &default_conf_flags,			&inptr, &outptr, sti->glob_cfg);		spin_unlock_irqrestore(&sti->lock, flags);	} while(ret == 1);}#endifstatic void sti_putc(struct sti_struct *sti, int c, int y, int x){	struct sti_font_inptr inptr = {		(u32) sti->font, c_index(sti, c), c_fg(sti, c), c_bg(sti, c),		x * sti_font_x(sti), y * sti_font_y(sti), NULL	};	struct sti_font_outptr outptr = {		0, NULL	};	s32 ret;	unsigned long flags;	do {		spin_lock_irqsave(&sti->lock, flags);		ret = STI_CALL(sti->font_unpmv, &default_font_flags,			&inptr, &outptr, sti->glob_cfg);		spin_unlock_irqrestore(&sti->lock, flags);	} while(ret == 1);}static struct sti_blkmv_flags clear_blkmv_flags = {	STI_WAIT, 1, 1, 0, 0, NULL};static void sti_set(struct sti_struct *sti, int src_y, int src_x,	int height, int width, u8 color){	struct sti_blkmv_inptr inptr = {		color, color,		src_x, src_y ,		src_x, src_y ,		width, height,		NULL	};	struct sti_blkmv_outptr outptr = { 0, NULL };	s32 ret = 0;	unsigned long flags;		do {		spin_lock_irqsave(&sti->lock, flags);		ret = STI_CALL(sti->block_move, &clear_blkmv_flags,			&inptr, &outptr, sti->glob_cfg);		spin_unlock_irqrestore(&sti->lock, flags);	} while(ret == 1);}static void sti_clear(struct sti_struct *sti, int src_y, int src_x,	int height, int width){	struct sti_blkmv_inptr inptr = {		0, 0,		src_x * sti_font_x(sti), src_y * sti_font_y(sti),		src_x * sti_font_x(sti), src_y * sti_font_y(sti),		width * sti_font_x(sti), height* sti_font_y(sti),		NULL	};	struct sti_blkmv_outptr outptr = { 0, NULL };	s32 ret = 0;	unsigned long flags;	do {		spin_lock_irqsave(&sti->lock, flags);		ret = STI_CALL(sti->block_move, &clear_blkmv_flags,			&inptr, &outptr, sti->glob_cfg);		spin_unlock_irqrestore(&sti->lock, flags);	} while(ret == 1);}static struct sti_blkmv_flags default_blkmv_flags = {	STI_WAIT, 0, 0, 0, 0, NULL};static void sti_bmove(struct sti_struct *sti, int src_y, int src_x,	int dst_y, int dst_x, int height, int width){	struct sti_blkmv_inptr inptr = {		0, 0,		src_x * sti_font_x(sti), src_y * sti_font_y(sti),		dst_x * sti_font_x(sti), dst_y * sti_font_y(sti),		width * sti_font_x(sti), height* sti_font_y(sti),		NULL	};	struct sti_blkmv_outptr outptr = { 0, NULL };	s32 ret = 0;	unsigned long flags;	do {		spin_lock_irqsave(&sti->lock, flags);		ret = STI_CALL(sti->block_move, &default_blkmv_flags,			&inptr, &outptr, sti->glob_cfg);		spin_unlock_irqrestore(&sti->lock, flags);	} while(ret == 1);}/* STICON */static const char __init *sticon_startup(void){	return "STI console";}static int sticon_set_palette(struct vc_data *c, unsigned char *table){	return -EINVAL;}static int sticon_font_op(struct vc_data *c, struct console_font_op *op){	return -ENOSYS;}static void sticon_putc(struct vc_data *conp, int c, int ypos, int xpos){	sti_putc(&default_sti, c, ypos, xpos);}static void sticon_putcs(struct vc_data *conp, const unsigned short *s,	int count, int ypos, int xpos){	while(count--) {		sti_putc(&default_sti, scr_readw(s++), ypos, xpos++);	}}static void sticon_cursor(struct vc_data *conp, int mode){}static int sticon_scroll(struct vc_data *conp, int t, int b, int dir,			int count){	struct sti_struct *sti = &default_sti;	if(console_blanked)		return 0;	sticon_cursor(conp, CM_ERASE);	switch(dir) {	case SM_UP:		sti_bmove(sti, t+count, 0, t, 0, b-t-count, conp->vc_cols);		sti_clear(sti, b-count, 0, count, conp->vc_cols);		break;	case SM_DOWN:		sti_bmove(sti, t, 0, t+count, 0, b-t-count, conp->vc_cols);		sti_clear(sti, t, 0, count, conp->vc_cols);		break;	}	return 0;}	static void sticon_bmove(struct vc_data *conp, int sy, int sx, int dy, int dx,	int height, int width){	sti_bmove(&default_sti, sy, sx, dy, dx, height, width);}static void sticon_init(struct vc_data *c, int init){	struct sti_struct *sti = &default_sti;	int vc_cols, vc_rows;	sti_set(sti, 0, 0, sti_onscreen_y(sti), sti_onscreen_x(sti), 0);	c->vc_can_do_color = 1;	vc_cols = PTR_STI(sti->glob_cfg)->onscreen_x / sti_font_x(sti);	vc_rows = PTR_STI(sti->glob_cfg)->onscreen_y / sti_font_y(sti);	vc_resize_con(vc_rows, vc_cols, c->vc_num);}static void sticon_deinit(struct vc_data *c){}static void sticon_clear(struct vc_data *conp, int sy, int sx, int height,			int width){	sti_clear(&default_sti, sy, sx, height, width);}static int sticon_switch(struct vc_data *conp){	return 0;}static int sticon_blank(struct vc_data *conp, int blank){	return 0;}static int sticon_scrolldelta(struct vc_data *conp, int lines){	return 0;}static int sticon_set_origin(struct vc_data *conp){	return 0;}static u8 sticon_build_attr(struct vc_data *conp, u8 color, u8 intens, u8 blink, u8 underline, u8 reverse){	u8 attr = ((color & 0x70) >> 1) | ((color & 7));	if(reverse) {		color = ((color>>3)&0x7) | ((color &0x7)<<3);	}	return attr;}static struct consw sti_con = {	con_startup: 		sticon_startup, 	con_init: 		sticon_init,	con_deinit: 		sticon_deinit,	con_clear: 		sticon_clear,	con_putc: 		sticon_putc,	con_putcs: 		sticon_putcs,	con_cursor: 		sticon_cursor,	con_scroll: 		sticon_scroll,	con_bmove: 		sticon_bmove,	con_switch: 		sticon_switch,	con_blank: 		sticon_blank,	con_font_op:		sticon_font_op,	con_set_palette:	sticon_set_palette,	con_scrolldelta:	sticon_scrolldelta,	con_set_origin: 	sticon_set_origin,	con_build_attr:		sticon_build_attr,};#include <asm/pgalloc.h>	/* need cache flush routines */static void __init sti_rom_copy(unsigned long base, unsigned long offset,				unsigned long count, void *dest){	void *savedest = dest;	int savecount = count;	while(count >= 4) {		count -= 4;		*(u32 *)dest = gsc_readl(base + offset);#if 0		DPRINTK(("%08x\n", *(u32 *)dest));		if(*(u32 *)dest == 0x64646464) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色94色欧美sute亚洲线路一ni| 夜夜操天天操亚洲| 韩国欧美国产1区| 欧美成人一区二区三区片免费| 图片区小说区国产精品视频| 欧美日韩一级视频| 亚洲成人av中文| 欧美高清dvd| 青青草原综合久久大伊人精品| 在线综合+亚洲+欧美中文字幕| 午夜精品成人在线视频| 91精品国产综合久久久久久久久久 | 91精品欧美综合在线观看最新| 在线观看一区日韩| 欧美日韩国产影片| 亚洲va中文字幕| 亚洲国产成人av网| 久久99精品久久久久久国产越南| 中文字幕一区二区三| 日韩伦理免费电影| 亚洲日本va午夜在线影院| 亚洲男人天堂av网| 亚洲乱码国产乱码精品精的特点| 中文字幕精品一区二区精品绿巨人 | 欧美国产激情二区三区| 成人免费看黄yyy456| 亚洲人成精品久久久久久 | 在线免费亚洲电影| 亚洲成a人片综合在线| 日韩一区二区在线看| 午夜精品成人在线| 久久精品人人做| 91免费在线看| 亚洲免费色视频| 日韩午夜在线播放| 成人视屏免费看| 亚洲一区日韩精品中文字幕| 欧美第一区第二区| 99这里都是精品| 天天av天天翘天天综合网色鬼国产| 欧美一级片免费看| 99天天综合性| 日韩va亚洲va欧美va久久| 国产女人18毛片水真多成人如厕 | 色94色欧美sute亚洲线路一ni| 亚洲成人www| 国产亚洲欧美色| 成人av在线影院| 亚洲女同ⅹxx女同tv| 91精品国产91久久综合桃花| 高清成人免费视频| 亚洲成人av福利| 日本一区二区高清| 日韩你懂的在线播放| 91蝌蚪porny| 黄色精品一二区| 17c精品麻豆一区二区免费| 日韩一级完整毛片| 欧洲av在线精品| 国产成人99久久亚洲综合精品| 午夜电影久久久| 亚洲人亚洲人成电影网站色| 精品国产免费一区二区三区四区| 99精品欧美一区二区三区综合在线| 美女性感视频久久| 亚洲国产日产av| 国产精品国模大尺度视频| 国产精品久久久久桃色tv| 日韩欧美一二三区| 欧美日韩精品一区视频| 91免费版pro下载短视频| 国产成人在线免费观看| 日本美女视频一区二区| 亚洲高清在线精品| 亚洲综合色网站| 亚洲欧洲性图库| 国产欧美一区二区精品性色| 精品毛片乱码1区2区3区| 欧美日韩一区中文字幕| 91在线视频免费观看| 国产成人精品1024| 国产一区二区在线看| 日本成人在线网站| 日本欧美一区二区| 午夜视频久久久久久| 亚洲国产wwwccc36天堂| 亚洲一二三四久久| 一区二区三区自拍| 日韩欧美aaaaaa| 精品va天堂亚洲国产| 欧美一区二区网站| 欧美一区二区播放| 欧美一级黄色录像| www国产成人免费观看视频 深夜成人网| 欧美美女黄视频| 欧美色图一区二区三区| 欧洲精品在线观看| 欧美日韩高清不卡| 欧美一级黄色片| 欧美大度的电影原声| 亚洲精品在线电影| 久久久久国产一区二区三区四区 | 色综合久久88色综合天天免费| 91在线云播放| 欧美日韩另类国产亚洲欧美一级| 欧美视频自拍偷拍| 91精品国产综合久久久蜜臀粉嫩| 欧美一区二区三区视频免费播放 | 亚洲欧洲中文日韩久久av乱码| 亚洲精品精品亚洲| 天天色图综合网| 紧缚捆绑精品一区二区| 国产欧美一区二区精品仙草咪| 欧美日韩一区二区三区在线| 一本一道久久a久久精品| 色婷婷狠狠综合| 国产成a人亚洲| 不卡免费追剧大全电视剧网站| 国产麻豆精品在线| 奇米色一区二区| 免费成人在线网站| 一区二区三区在线视频观看58| 欧美国产日韩亚洲一区| 亚洲精品国产a| 日韩亚洲欧美在线| 欧美一区二区三区四区在线观看 | 奇米精品一区二区三区在线观看一| 欧美老年两性高潮| 欧美一级理论片| 欧美精品一区二区久久婷婷| 国产人成一区二区三区影院| 国产精品丝袜在线| 日韩 欧美一区二区三区| 国产精品一区一区| 色视频成人在线观看免| 91麻豆高清视频| 欧美日本一区二区| 国产校园另类小说区| 亚洲乱码国产乱码精品精98午夜| 久久影视一区二区| 亚洲高清不卡在线| 国产精品99久久久久久宅男| 91黄色激情网站| 国产欧美综合在线观看第十页| 中文字幕制服丝袜一区二区三区| 国产精品一卡二卡| 精品精品国产高清a毛片牛牛| 中文字幕成人在线观看| 岛国av在线一区| 国产精品免费看片| 欧美三级日韩在线| 婷婷综合五月天| 国产日产亚洲精品系列| 日本一区二区三区四区| 亚洲精品成人a在线观看| 成人免费看片app下载| 久久夜色精品国产噜噜av| 久久66热偷产精品| 免费在线观看精品| 亚洲精品视频自拍| 成人精品一区二区三区中文字幕| 国产精品自在在线| 欧美一区午夜精品| 夜夜嗨av一区二区三区四季av| 懂色中文一区二区在线播放| 色视频成人在线观看免| 日韩免费在线观看| 亚洲成人资源网| 在线国产亚洲欧美| 亚洲日本在线观看| 99久久精品国产一区二区三区| 久久精品亚洲麻豆av一区二区 | 亚洲欧美在线视频| 北条麻妃一区二区三区| 国产精品传媒入口麻豆| 亚洲成人av免费| 国产精品久久久久毛片软件| 99国产精品久久久久久久久久| 午夜一区二区三区在线观看| 精品欧美久久久| 在线播放中文字幕一区| 91免费观看视频在线| 成人免费的视频| 国产曰批免费观看久久久| 亚洲国产一区二区视频| 国产视频一区不卡| 国产亚洲欧美一级| 日韩视频一区二区| 欧美一区二区视频观看视频| 99久久99久久综合| 成人一区二区三区视频在线观看| 日本大胆欧美人术艺术动态| 亚洲精品成人悠悠色影视| 亚洲图片你懂的| 亚洲午夜av在线| 亚洲一区二区视频在线| 久久99精品网久久| 免费在线视频一区| 在线播放中文字幕一区| 国产精品乱码一区二三区小蝌蚪|