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

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

?? hpfb.c

?? linux下的VIDEO接口驅動程序
?? C
字號:
/* *	HP300 Topcat framebuffer support (derived from macfb of all things) *	Phil Blundell <philb@gnu.org> 1998 *  * Should this be moved to drivers/dio/video/ ? -- Peter Maydell * No! -- Jes */#include <linux/module.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/errno.h>#include <linux/string.h>#include <linux/mm.h>#include <linux/tty.h>#include <linux/slab.h>#include <linux/delay.h>#include <linux/init.h>#include <linux/fb.h>#include <linux/dio.h>#include <asm/io.h>#include <asm/blinken.h>#include <asm/hwtest.h>#include <video/fbcon.h>#include <video/fbcon-mfb.h>#include <video/fbcon-cfb2.h>#include <video/fbcon-cfb4.h>#include <video/fbcon-cfb8.h>static struct display disp;static struct fb_info fb_info;unsigned long fb_start, fb_size = 1024*768, fb_line_length = 1024;unsigned long fb_regs;unsigned char fb_bitmask;#define TC_WEN		0x4088#define TC_REN		0x408c#define TC_FBEN		0x4090#define TC_NBLANK	0x4080/* blitter regs */#define BUSY		0x4044#define WMRR		0x40ef#define SOURCE_X	0x40f2#define SOURCE_Y	0x40f6#define DEST_X		0x40fa#define DEST_Y		0x40fe#define WHEIGHT		0x4106#define WWIDTH		0x4102#define WMOVE		0x409cstatic struct fb_var_screeninfo hpfb_defined = {	0,0,0,0,	/* W,H, W, H (virtual) load xres,xres_virtual*/	0,0,		/* virtual -> visible no offset */	0,		/* depth -> load bits_per_pixel */	0,		/* greyscale ? */	{0,2,0},	/* R */	{0,2,0},	/* G */	{0,2,0},	/* B */	{0,0,0},	/* transparency */	0,		/* standard pixel format */	FB_ACTIVATE_NOW,	274,195,	/* 14" monitor */	FB_ACCEL_NONE,	0L,0L,0L,0L,0L,	0L,0L,0,	/* No sync info */	FB_VMODE_NONINTERLACED,	{0,0,0,0,0,0}};struct hpfb_par{};static int currcon = 0;struct hpfb_par current_par;static void hpfb_encode_var(struct fb_var_screeninfo *var, 				struct hpfb_par *par){	int i=0;	var->xres=1024;	var->yres=768;	var->xres_virtual=1024;	var->yres_virtual=768;	var->xoffset=0;	var->yoffset=0;	var->bits_per_pixel = 1;	var->grayscale=0;	var->transp.offset=0;	var->transp.length=0;	var->transp.msb_right=0;	var->nonstd=0;	var->activate=0;	var->height= -1;	var->width= -1;	var->vmode=FB_VMODE_NONINTERLACED;	var->pixclock=0;	var->sync=0;	var->left_margin=0;	var->right_margin=0;	var->upper_margin=0;	var->lower_margin=0;	var->hsync_len=0;	var->vsync_len=0;	for(i=0;i<ARRAY_SIZE(var->reserved);i++)		var->reserved[i]=0;}static void hpfb_get_par(struct hpfb_par *par){	*par=current_par;}static int fb_update_var(int con, struct fb_info *info){	return 0;}static int do_fb_set_var(struct fb_var_screeninfo *var, int isactive){	struct hpfb_par par;		hpfb_get_par(&par);	hpfb_encode_var(var, &par);	return 0;}static int hpfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,			  struct fb_info *info){	return 0;}/* * Set the palette.  This may not work on all boards but only experimentation will tell. * XXX Doesn't work at all. */static int hpfb_set_cmap(struct fb_cmap *cmap, int kspc, int con,			  struct fb_info *info){	unsigned int i;	for (i = 0; i < cmap->len; i++)	{		while (readw(fb_regs + 0x6002) & 0x4) udelay(1);		writew(0, fb_regs + 0x60f0);		writew(cmap->start + i, fb_regs + 0x60b8);		writew(cmap->red[i], fb_regs + 0x60b2);		writew(cmap->green[i], fb_regs + 0x60b4);		writew(cmap->blue[i], fb_regs + 0x60b6);		writew(0xff, fb_regs + 0x60f0);		udelay(100);	}	writew(0xffff, fb_regs + 0x60ba);	return 0;}static int hpfb_get_var(struct fb_var_screeninfo *var, int con,			 struct fb_info *info){	struct hpfb_par par;	if(con==-1)	{		hpfb_get_par(&par);		hpfb_encode_var(var, &par);	}	else		*var=fb_display[con].var;	return 0;}static int hpfb_set_var(struct fb_var_screeninfo *var, int con,			 struct fb_info *info){	int err;		if ((err=do_fb_set_var(var, 1)))		return err;	return 0;}static void hpfb_encode_fix(struct fb_fix_screeninfo *fix, 				struct hpfb_par *par){	memset(fix, 0, sizeof(struct fb_fix_screeninfo));	strcpy(fix->id, "HP300 Topcat");	/*	 * X works, but screen wraps ... 	 */	fix->smem_start=fb_start;	fix->smem_len=fb_size;	fix->type = FB_TYPE_PACKED_PIXELS;	fix->visual = FB_VISUAL_PSEUDOCOLOR;	fix->xpanstep=0;	fix->ypanstep=0;	fix->ywrapstep=0;	fix->line_length=fb_line_length;}static int hpfb_get_fix(struct fb_fix_screeninfo *fix, int con,			 struct fb_info *info){	struct hpfb_par par;	hpfb_get_par(&par);	hpfb_encode_fix(fix, &par);	return 0;}static void topcat_blit(int x0, int y0, int x1, int y1, int w, int h){	while (readb(fb_regs + BUSY) & fb_bitmask);	writeb(0x3, fb_regs + WMRR);	writew(x0, fb_regs + SOURCE_X);	writew(y0, fb_regs + SOURCE_Y);	writew(x1, fb_regs + DEST_X);	writew(y1, fb_regs + DEST_Y);	writew(h, fb_regs + WHEIGHT);	writew(w, fb_regs + WWIDTH);	writeb(fb_bitmask, fb_regs + WMOVE);}static int hpfb_switch(int con, struct fb_info *info){	do_fb_set_var(&fb_display[con].var,1);	currcon=con;	return 0;}/* 0 unblank, 1 blank, 2 no vsync, 3 no hsync, 4 off */static void hpfb_blank(int blank, struct fb_info *info){	/* Not supported */}static void hpfb_set_disp(int con){	struct fb_fix_screeninfo fix;	struct display *display;		if (con >= 0)		display = &fb_display[con];	else		display = &disp;	/* used during initialization */	hpfb_get_fix(&fix, con, 0);	display->screen_base = fix.smem_start;	display->visual = fix.visual;	display->type = fix.type;	display->type_aux = fix.type_aux;	display->ypanstep = fix.ypanstep;	display->ywrapstep = fix.ywrapstep;	display->line_length = fix.line_length;	display->next_line = fix.line_length;	display->can_soft_blank = 0;	display->inverse = 0;	display->dispsw = &fbcon_cfb8;}static struct fb_ops hpfb_ops = {	owner:		THIS_MODULE,	fb_get_fix:	hpfb_get_fix,	fb_get_var:	hpfb_get_var,	fb_set_var:	hpfb_set_var,	fb_get_cmap:	hpfb_get_cmap,	fb_set_cmap:	hpfb_set_cmap,};#define TOPCAT_FBOMSB	0x5d#define TOPCAT_FBOLSB	0x5fint __init hpfb_init_one(unsigned long base){	unsigned long fboff;	fboff = (readb(base + TOPCAT_FBOMSB) << 8) 		| readb(base + TOPCAT_FBOLSB);	fb_start = 0xf0000000 | (readb(base + fboff) << 16);	fb_regs = base;#if 0	/* This is the magic incantation NetBSD uses to make Catseye boards work. */	writeb(0, base+0x4800);	writeb(0, base+0x4510);	writeb(0, base+0x4512);	writeb(0, base+0x4514);	writeb(0, base+0x4516);	writeb(0x90, base+0x4206);#endif	/*	 *	Fill in the available video resolution	 */	 	hpfb_defined.xres = 1024;	hpfb_defined.yres = 768;	hpfb_defined.xres_virtual = 1024;	hpfb_defined.yres_virtual = 768;	hpfb_defined.bits_per_pixel = 8;	/* 	 *	Give the hardware a bit of a prod and work out how many bits per	 *	pixel are supported.	 */		writeb(0xff, base + TC_WEN);	writeb(0xff, base + TC_FBEN);	writeb(0xff, fb_start);	fb_bitmask = readb(fb_start);	/*	 *	Enable reading/writing of all the planes.	 */	writeb(fb_bitmask, base + TC_WEN);	writeb(fb_bitmask, base + TC_REN);	writeb(fb_bitmask, base + TC_FBEN);	writeb(0x1, base + TC_NBLANK);	/*	 *	Let there be consoles..	 */	strcpy(fb_info.modename, "Topcat");	fb_info.changevar = NULL;	fb_info.node = -1;	fb_info.fbops = &hpfb_ops;	fb_info.disp = &disp;	fb_info.switch_con = &hpfb_switch;	fb_info.updatevar = &fb_update_var;	fb_info.blank = &hpfb_blank;	fb_info.flags = FBINFO_FLAG_DEFAULT;	do_fb_set_var(&hpfb_defined, 1);	hpfb_get_var(&disp.var, -1, &fb_info);	hpfb_set_disp(-1);	if (register_framebuffer(&fb_info) < 0)		return 1;	return 0;}/*  * Check that the secondary ID indicates that we have some hope of working with this * framebuffer.  The catseye boards are pretty much like topcats and we can muddle through. */#define topcat_sid_ok(x)  (((x) == DIO_ID2_LRCATSEYE) || ((x) == DIO_ID2_HRCCATSEYE)    \			   || ((x) == DIO_ID2_HRMCATSEYE) || ((x) == DIO_ID2_TOPCAT))/*  * Initialise the framebuffer */int __init hpfb_init(void){	unsigned int sid;	/* Topcats can be on the internal IO bus or real DIO devices.	 * The internal variant sits at 0xf0560000; it has primary	 * and secondary ID registers just like the DIO version.	 * So we merge the two detection routines.	 *	 * Perhaps this #define should be in a global header file:	 * I believe it's common to all internal fbs, not just topcat.	 */#define INTFBADDR 0xf0560000	if (hwreg_present((void *)INTFBADDR) && (DIO_ID(INTFBADDR) == DIO_ID_FBUFFER)		&& topcat_sid_ok(sid = DIO_SECID(INTFBADDR)))	{		printk("Internal Topcat found (secondary id %02x)\n", sid); 		hpfb_init_one(INTFBADDR);	}	else	{		int sc = dio_find(DIO_ID_FBUFFER);		if (sc)		{			unsigned long addr = (unsigned long)dio_scodetoviraddr(sc);			unsigned int sid = DIO_SECID(addr);			if (topcat_sid_ok(sid))			{				printk("Topcat found at DIO select code %02x "				       "(secondary id %02x)\n", sc, sid);				hpfb_init_one(addr);			}		}	}	return 0;}MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕欧美一| 91在线一区二区三区| 成人av片在线观看| 91精品国产综合久久福利软件| 国产欧美一区二区精品秋霞影院| 亚洲国产cao| 国产iv一区二区三区| 欧美一级在线免费| 樱花影视一区二区| 成人的网站免费观看| 26uuu欧美日本| 五月激情综合婷婷| 色噜噜狠狠色综合欧洲selulu| 久久久久久久电影| 精品一区二区日韩| 日韩一级在线观看| 日韩影视精彩在线| 精品视频一区三区九区| 亚洲蜜桃精久久久久久久| 国产91对白在线观看九色| 精品国产一区二区三区久久久蜜月| 一区二区三区视频在线观看| 成人精品gif动图一区| 国产日韩精品一区| 国产精品一区二区黑丝| www精品美女久久久tv| 日韩经典一区二区| 欧美一区二区在线观看| 午夜精品久久久久久| 欧美日韩一区二区欧美激情| 夜夜精品浪潮av一区二区三区| caoporn国产精品| 中文字幕一区二区三| www.欧美日韩国产在线| 成人欧美一区二区三区1314| 99久久精品免费看国产| 综合激情成人伊人| 色狠狠综合天天综合综合| 亚洲乱码国产乱码精品精98午夜| 91麻豆精品一区二区三区| 亚洲视频一二三区| 欧美中文字幕一区| 三级一区在线视频先锋| 日韩欧美国产1| 国产主播一区二区| 日本一区二区三区四区在线视频| 成人激情图片网| 亚洲精品乱码久久久久久 | 午夜一区二区三区视频| 欧美日韩国产综合久久| 奇米888四色在线精品| 日韩一区二区三区高清免费看看| 免费在线观看日韩欧美| 精品91自产拍在线观看一区| 国产suv一区二区三区88区| 中文字幕视频一区二区三区久| 日本韩国一区二区三区| 亚洲mv大片欧洲mv大片精品| 日韩一区二区麻豆国产| 国产盗摄女厕一区二区三区| 中文字幕日韩欧美一区二区三区| 欧美色网一区二区| 黑人巨大精品欧美黑白配亚洲| 中文字幕日韩一区二区| 欧美日韩一区在线观看| 国产乱人伦偷精品视频不卡| 亚洲美女淫视频| 精品久久久久久久久久久久包黑料| 国产高清精品在线| 亚洲一级在线观看| 国产日韩三级在线| 在线播放中文字幕一区| 成人小视频在线观看| 丝袜a∨在线一区二区三区不卡| 久久色.com| 欧美日韩精品高清| 成人黄色大片在线观看| 石原莉奈在线亚洲二区| 国产精品嫩草99a| 日韩一二三区视频| 色天使色偷偷av一区二区| 久久福利资源站| 亚洲一区日韩精品中文字幕| 国产午夜精品福利| 欧美一级免费大片| 色老综合老女人久久久| 国v精品久久久网| 热久久久久久久| 亚洲国产日韩一级| 国产精品成人免费| 国产亚洲综合色| 91精品国产综合久久福利| 99re热这里只有精品视频| 精品一区二区三区在线播放 | 欧美哺乳videos| 在线看日本不卡| 99在线精品免费| 国产主播一区二区| 裸体一区二区三区| 日日摸夜夜添夜夜添国产精品 | 五月天亚洲婷婷| 亚洲精品欧美二区三区中文字幕| 国产视频一区在线播放| 精品毛片乱码1区2区3区| 欧美日韩成人一区二区| 欧美自拍丝袜亚洲| 91福利社在线观看| 在线中文字幕一区二区| 91麻豆文化传媒在线观看| 成人黄色小视频在线观看| 国产91富婆露脸刺激对白| 国产永久精品大片wwwapp| 久久精品国产精品青草| 蜜臀av性久久久久蜜臀aⅴ流畅| 天天综合日日夜夜精品| 亚洲bt欧美bt精品777| 亚洲国产精品久久艾草纯爱| 亚洲午夜激情网页| 无码av免费一区二区三区试看| 亚洲国产精品自拍| 三级精品在线观看| 蜜桃视频免费观看一区| 久久精品二区亚洲w码| 麻豆精品视频在线观看视频| 麻豆国产精品一区二区三区| 狠狠色丁香久久婷婷综| 国产精品123| 99久久国产免费看| 欧美在线一二三| 日韩一区二区三区精品视频| 欧美成人官网二区| 国产欧美日韩在线看| 亚洲欧美中日韩| 亚洲永久免费视频| 美洲天堂一区二卡三卡四卡视频| 久久精品国产精品青草| 成人免费福利片| 欧美三级日韩三级| 精品久久免费看| 一区在线播放视频| 三级欧美在线一区| 国产电影一区在线| 欧美色大人视频| 精品奇米国产一区二区三区| 欧美激情一区二区三区全黄| 亚洲女爱视频在线| 麻豆免费看一区二区三区| 国产九色sp调教91| 欧美亚洲高清一区二区三区不卡| 日韩一区二区麻豆国产| 国产精品卡一卡二| 日本午夜精品一区二区三区电影| 国产一区免费电影| 91传媒视频在线播放| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲国产精华液网站w| 亚洲二区视频在线| 成人黄色在线视频| 欧美一区二区三区免费在线看| 久久精品欧美日韩| 日韩成人精品视频| www.日韩大片| 精品日韩欧美在线| 午夜亚洲福利老司机| 成人性色生活片| 欧美mv日韩mv亚洲| 亚洲成人久久影院| 99久久久久久99| 精品国产乱码久久久久久久久| 亚洲免费av观看| 风间由美一区二区三区在线观看| 欧美日韩国产高清一区二区| 中文字幕av在线一区二区三区| 日韩 欧美一区二区三区| 色一情一伦一子一伦一区| 久久新电视剧免费观看| 男女男精品视频| 欧美影视一区在线| 亚洲图片激情小说| 国产福利一区在线观看| 日韩欧美激情四射| 日韩高清一级片| 欧美亚男人的天堂| 亚洲欧美乱综合| 色天天综合色天天久久| 美洲天堂一区二卡三卡四卡视频| 91亚洲男人天堂| 欧美韩日一区二区三区| 国产专区综合网| 精品国产一区二区三区久久久蜜月 | 国产欧美日产一区| 国内精品第一页| 日韩精品资源二区在线| 三级欧美在线一区| 91精品国产日韩91久久久久久| 一区二区三区在线不卡| 91黄视频在线| 亚洲一级在线观看| 欧美精品三级在线观看| 婷婷国产在线综合|