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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fbcon-sti.c

?? linux和2410結(jié)合開發(fā) 用他可以生成2410所需的zImage文件
?? C
字號:
/* * linux/drivers/video/fbcon-sti.c -- Low level frame buffer *  	operations for generic HP video boards using STI (standard *  	text interface) firmware * *  Based on linux/drivers/video/fbcon-artist.c *	Created 5 Apr 1997 by Geert Uytterhoeven *	Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> * * 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.  */#include <linux/module.h>#include <linux/tty.h>#include <linux/console.h>#include <linux/string.h>#include <linux/fb.h>#include <linux/delay.h>#include <asm/types.h>#include <video/fbcon.h>#include <video/fbcon-mfb.h>#include "sti.h"/* Translate an address as it would be found in a 2048x2048x1 bit frame * buffer into a logical address Artist actually expects.  Addresses fed * into Artist look like this: *  fixed          Y               X * FFFF FFFF LLLL LLLL LLLC CCCC CCCC CC00 * * our "RAM" addresses look like this: *  * FFFF FFFF 0000 0LLL LLLL LLLL CCCC CCCC [CCC] * * */static inline u32ram2log(void * addr){	u32 a = (unsigned long) addr;	u32 r;#if 0	r  =   a & 0xff000000;		/* fixed part */	r += ((a & 0x000000ff) << 5);	r += ((a & 0x00ffff00) << 3);#else	r  =   a & 0xff000000;		/* fixed part */	r += ((a & 0x000000ff) << 5);	r += ((a & 0x0007ff00) << 5);#endif	return r;}/* All those functions need better names. */static voidmemcpy_fromhp_tohp(void *dest, void *src, int count){	unsigned long d = ram2log(dest);	unsigned long s = ram2log(src);	count += 3;	count &= ~3; /* XXX */	while(count) {		count --;		gsc_writel(~gsc_readl(s), d);		d += 32*4;		s += 32*4;	}}static voidmemcpy_tohp(void *dest, void *src, int count){	unsigned long d = (unsigned long) dest;	u32 *s = (u32 *)src;	count += 3;	count &= ~3; /* XXX */	d = ram2log(dest);	while(count) {		count--;		gsc_writel(*s++, d);		d += 32*4;	}}static voidmemcopy_fromhp(void *dest, void *src, int count){	/* FIXME */	printk("uhm ...\n");}static voidmemset_tohp(void *dest, u32 word, int count){	unsigned long d = ram2log(dest);	count += 3;	count &= ~3;	while(count) {		count--;		gsc_writel(word, d);		d += 32;	}}static u8readb_hp(void *src){	unsigned long s = ram2log(src);	return ~gsc_readb(s);}static voidwriteb_hp(u8 b, void *dst){	unsigned long d = ram2log(dst);	if((d&0xf0000000) != 0xf0000000) {		printk("writeb_hp %02x %p (%08lx) (%p)\n",			b, dst, d, __builtin_return_address(0));		return;	}	gsc_writeb(b, d);}static voidfbcon_sti_setup(struct display *p){	if (p->line_length)		p->next_line = p->line_length;	else		p->next_line = p->var.xres_virtual>>3;	p->next_plane = 0;}static voidfbcon_sti_bmove(struct display *p, int sy, int sx,		int dy, int dx,		int height, int width){#if 0 /* Unfortunately, still broken */	sti_bmove(&default_sti /* FIXME */, sy, sx, dy, dx, height, width);#else	u8 *src, *dest;	u_int rows;	if (sx == 0 && dx == 0 && width == p->next_line) {		src = p->screen_base+sy*fontheight(p)*width;		dest = p->screen_base+dy*fontheight(p)*width;		memcpy_fromhp_tohp(dest, src, height*fontheight(p)*width);	} else if (dy <= sy) {		src = p->screen_base+sy*fontheight(p)*p->next_line+sx;		dest = p->screen_base+dy*fontheight(p)*p->next_line+dx;		for (rows = height*fontheight(p); rows--;) {			memcpy_fromhp_tohp(dest, src, width);			src += p->next_line;			dest += p->next_line;		}	} else {		src = p->screen_base+((sy+height)*fontheight(p)-1)*p->next_line+sx;		dest = p->screen_base+((dy+height)*fontheight(p)-1)*p->next_line+dx;		for (rows = height*fontheight(p); rows--;) {			memcpy_fromhp_tohp(dest, src, width);			src -= p->next_line;			dest -= p->next_line;		}	}#endif}static voidfbcon_sti_clear(struct vc_data *conp,		struct display *p, int sy, int sx,		int height, int width){	u8 *dest;	u_int rows;	int inverse = conp ? attr_reverse(p,conp->vc_video_erase_char) : 0;	dest = p->screen_base+sy*fontheight(p)*p->next_line+sx;	if (sx == 0 && width == p->next_line) {		if (inverse)			memset_tohp(dest, ~0, height*fontheight(p)*width);		else			memset_tohp(dest,  0, height*fontheight(p)*width);	} else		for (rows = height*fontheight(p); rows--; dest += p->next_line)			if (inverse)				memset_tohp(dest, 0xffffffff, width);			else				memset_tohp(dest, 0x00000000, width);}static void fbcon_sti_putc(struct vc_data *conp,			   struct display *p, int c,			   int yy, int xx){	u8 *dest, *cdat;	u_int rows, bold, revs, underl;	u8 d;	dest = p->screen_base+yy*fontheight(p)*p->next_line+xx;	cdat = p->fontdata+(c&p->charmask)*fontheight(p);	bold = attr_bold(p,c);	revs = attr_reverse(p,c);	underl = attr_underline(p,c);	for (rows = fontheight(p); rows--; dest += p->next_line) {		d = *cdat++;		if (underl && !rows)			d = 0xff;		else if (bold)			d |= d>>1;		if (revs)			d = ~d;		writeb_hp (d, dest);	}}static void fbcon_sti_putcs(struct vc_data *conp,			    struct display *p, 			    const unsigned short *s,			    int count, int yy, int xx){	u8 *dest, *dest0, *cdat;	u_int rows, bold, revs, underl;	u8 d;	u16 c;	if(((unsigned)xx > 200) || ((unsigned) yy > 200)) {		printk("refusing to putcs %p %p %p %d %d %d (%p)\n",			conp, p, s, count, yy, xx, __builtin_return_address(0));		return;	}		dest0 = p->screen_base+yy*fontheight(p)*p->next_line+xx;	if(((u32)dest0&0xf0000000)!=0xf0000000) {		printk("refusing to putcs %p %p %p %d %d %d (%p) %p = %p + %d * %d * %ld + %d\n",			conp, p, s, count, yy, xx, __builtin_return_address(0),			dest0, p->screen_base, yy, fontheight(p), p->next_line,			xx);		return;	}		c = scr_readw(s);	bold = attr_bold(p, c);	revs = attr_reverse(p, c);	underl = attr_underline(p, c);	while (count--) {		c = scr_readw(s++) & p->charmask;		dest = dest0++;		cdat = p->fontdata+c*fontheight(p);		for (rows = fontheight(p); rows--; dest += p->next_line) {			d = *cdat++;			if (0 && underl && !rows)				d = 0xff;			else if (0 && bold)				d |= d>>1;			if (revs)				d = ~d;			writeb_hp (d, dest);		}	}}static void fbcon_sti_revc(struct display *p,			   int xx, int yy){	u8 *dest, d;	u_int rows;	dest = p->screen_base+yy*fontheight(p)*p->next_line+xx;	for (rows = fontheight(p); rows--; dest += p->next_line) {		d = readb_hp(dest);		writeb_hp (~d, dest);	}}static voidfbcon_sti_clear_margins(struct vc_data *conp,			struct display *p,			int bottom_only){	u8 *dest;	int height, bottom;	int inverse = conp ? attr_reverse(p,conp->vc_video_erase_char) : 0;	/* XXX Need to handle right margin? */	height = p->var.yres - conp->vc_rows * fontheight(p);	if (!height)		return;	bottom = conp->vc_rows + p->yscroll;	if (bottom >= p->vrows)		bottom -= p->vrows;	dest = p->screen_base + bottom * fontheight(p) * p->next_line;	if (inverse)		memset_tohp(dest, 0xffffffff, height * p->next_line);	else		memset_tohp(dest, 0x00000000, height * p->next_line);}    /*     *  `switch' for the low level operations     */struct display_switch fbcon_sti = {	setup:		fbcon_sti_setup, 	bmove:		fbcon_sti_bmove, 	clear:		fbcon_sti_clear,	putc:		fbcon_sti_putc, 	putcs:		fbcon_sti_putcs, 	revc:		fbcon_sti_revc,	clear_margins:	fbcon_sti_clear_margins,	fontwidthmask:	FONTWIDTH(8)};MODULE_LICENSE("GPL");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区在线电影| 国产亚洲自拍一区| 亚洲123区在线观看| 精品视频全国免费看| 日韩国产一区二| 欧美一级二级在线观看| 国产一区不卡精品| 国产精品久久毛片a| 色94色欧美sute亚洲线路二| 亚洲福利电影网| 欧美tk—视频vk| 成人免费福利片| 一级日本不卡的影视| 欧美精品日韩一本| 精品夜夜嗨av一区二区三区| 中文字幕av一区 二区| 色综合色综合色综合| 日韩二区三区在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 国产成人精品网址| 亚洲成av人片观看| 成人黄色国产精品网站大全在线免费观看 | 成人精品视频网站| 亚洲视频综合在线| 久久国内精品视频| 国产精品国产三级国产aⅴ入口| 91视频.com| 久久精品999| 最新欧美精品一区二区三区| 91精品在线免费观看| 高清不卡一二三区| 午夜免费久久看| 中文字幕不卡在线观看| 欧美一区二区三区不卡| 99精品久久久久久| 久久国产欧美日韩精品| 亚洲卡通欧美制服中文| 日韩欧美激情一区| 色诱视频网站一区| 韩国一区二区在线观看| 亚洲一区在线电影| 国产精品水嫩水嫩| 日韩三级免费观看| 一本到不卡精品视频在线观看| 日日噜噜夜夜狠狠视频欧美人| 欧美激情一区不卡| 精品少妇一区二区三区在线播放| 色综合天天综合在线视频| 国模无码大尺度一区二区三区| 亚洲成人av电影在线| 麻豆91精品91久久久的内涵| 亚洲国产精品成人综合色在线婷婷| 欧美美女一区二区三区| 色综合久久中文综合久久牛| 国内成+人亚洲+欧美+综合在线| 亚洲第一综合色| 亚洲精品国产成人久久av盗摄| 国产视频一区二区三区在线观看 | 成人精品视频一区二区三区| 麻豆freexxxx性91精品| 日本中文字幕一区二区视频| 亚洲综合色网站| 亚洲日本va午夜在线影院| 国产日韩精品久久久| 久久综合久久鬼色| 欧美一区二区视频观看视频| 欧美日韩国产小视频| 在线一区二区三区| 色偷偷88欧美精品久久久| aaa亚洲精品| av不卡一区二区三区| 暴力调教一区二区三区| 不卡在线视频中文字幕| 成人av在线资源网站| 国产91综合网| 成人黄色av网站在线| 成a人片国产精品| 91免费精品国自产拍在线不卡| 成人国产精品免费观看动漫| 成人午夜激情影院| 99r国产精品| 色呦呦日韩精品| 欧美丝袜丝交足nylons图片| 欧美日韩视频在线观看一区二区三区| 91成人免费在线| 欧美日韩一区二区三区四区五区 | 日本va欧美va瓶| 日本人妖一区二区| 狂野欧美性猛交blacked| 久久99国产精品麻豆| 国内外成人在线| 国产成人福利片| 91欧美激情一区二区三区成人| 一本大道久久a久久精二百| 91福利在线免费观看| 国产精品情趣视频| 日韩美女啊v在线免费观看| 亚洲精品久久久久久国产精华液| 亚洲午夜久久久| 免费的成人av| 懂色av噜噜一区二区三区av| 91在线你懂得| 日韩三级免费观看| 国产精品久久久久久久久久久免费看| 亚洲欧美国产三级| 日韩av二区在线播放| 国产福利视频一区二区三区| 91美女片黄在线观看91美女| 在线观看91av| 中文在线一区二区| 亚洲国产成人porn| 国产精品一线二线三线精华| av福利精品导航| 制服丝袜一区二区三区| 国产欧美精品一区| 午夜av一区二区| 国产成人亚洲精品狼色在线 | 国产在线国偷精品产拍免费yy | 国产一二精品视频| 色8久久人人97超碰香蕉987| 欧美一级黄色片| 亚洲丝袜自拍清纯另类| 日韩av在线播放中文字幕| www.日韩精品| 欧美精品在欧美一区二区少妇| 国产拍欧美日韩视频二区| 亚洲成人资源网| 成人一区二区在线观看| 91精品久久久久久久99蜜桃| 国产精品沙发午睡系列990531| 日韩va亚洲va欧美va久久| av不卡一区二区三区| 精品日韩在线观看| 亚洲愉拍自拍另类高清精品| 国产乱码精品一区二区三区忘忧草| 欧美日免费三级在线| 国产精品视频一二三区| 91在线看国产| 久久久亚洲高清| 蜜臀av性久久久久蜜臀av麻豆| 91在线免费播放| 中文字幕免费观看一区| 免费观看久久久4p| 欧美精品一二三| 一区二区三区在线视频观看58 | 欧美日韩一区二区三区高清| 国产欧美日韩精品a在线观看| 日本中文一区二区三区| 欧美中文字幕一区| 亚洲日本护士毛茸茸| 成人永久看片免费视频天堂| 欧美变态口味重另类| 三级欧美在线一区| 欧美视频一区二区三区四区| 亚洲日本电影在线| 91在线免费看| 亚洲特黄一级片| 99精品视频在线免费观看| 欧美国产综合一区二区| 国产成人自拍网| 国产肉丝袜一区二区| 国产精品99久久久久久久女警 | 国内精品嫩模私拍在线| 91精品国产福利在线观看| 亚洲成人免费看| 欧美女孩性生活视频| 午夜精品久久久久久久99水蜜桃| 欧美主播一区二区三区美女| 亚洲综合激情小说| 欧日韩精品视频| 亚洲国产成人91porn| 欧美精品九九99久久| 日韩二区三区在线观看| 欧美一区二区黄色| 精品在线观看视频| 久久久亚洲欧洲日产国码αv| 国产精品一区二区黑丝| 中文字幕精品综合| 91亚洲精品乱码久久久久久蜜桃| 18成人在线观看| 欧美专区日韩专区| 日韩黄色在线观看| www成人在线观看| 成人高清免费观看| 亚洲免费观看高清完整版在线观看 | 国产欧美精品一区二区三区四区 | 99免费精品视频| 亚洲精品一卡二卡| 欧美日韩你懂的| 裸体歌舞表演一区二区| 久久久久久久网| 99精品国产91久久久久久 | 国产精品美女久久久久aⅴ | 精品国产乱码久久久久久1区2区| 国产乱对白刺激视频不卡| 亚洲欧美区自拍先锋| 欧美狂野另类xxxxoooo| 国产一区在线观看麻豆| 亚洲欧美另类小说| 日韩女优视频免费观看|