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

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

?? fbgen.c

?? linux下的VIDEO接口驅動程序
?? C
字號:
/* * linux/drivers/video/fbgen.c -- Generic routines for frame buffer devices * *  Created 3 Jan 1998 by Geert Uytterhoeven * *	2001 - Documented with DocBook *	- Brad Douglas <brad@neruo.com> * * 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/string.h>#include <linux/tty.h>#include <linux/fb.h>#include <linux/slab.h>#include <asm/uaccess.h>#include <asm/io.h>#include <video/fbcon.h>static int currcon = 0;/* ---- `Generic' versions of the frame buffer device operations ----------- *//** *	fbgen_get_fix - get fixed part of display *	@fix: fb_fix_screeninfo structure *	@con: virtual console number *	@info: frame buffer info structure * *	Get the fixed information part of the display and place it *	into @fix for virtual console @con on device @info. * *	Returns negative errno on error, or zero on success. * */int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    char par[info2->parsize];    if (con == -1)	fbhw->get_par(&par, info2);    else {	int err;	if ((err = fbhw->decode_var(&fb_display[con].var, &par, info2)))	    return err;    }    memset(fix, 0, sizeof(struct fb_fix_screeninfo));    return fbhw->encode_fix(fix, &par, info2);}/** *	fbgen_get_var - get user defined part of display *	@var: fb_var_screeninfo structure *	@con: virtual console number *	@info: frame buffer info structure * *	Get the user defined part of the display and place it into @var *	for virtual console @con on device @info. * *	Returns negative errno on error, or zero for success. * */int fbgen_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    char par[info2->parsize];    if (con == -1) {	fbhw->get_par(&par, info2);	fbhw->encode_var(var, &par, info2);    } else	*var = fb_display[con].var;    return 0;}/** *	fbgen_set_var - set the user defined part of display *	@var: fb_var_screeninfo user defined part of the display *	@con: virtual console number *	@info: frame buffer info structure * *	Set the user defined part of the display as dictated by @var *	for virtual console @con on device @info. * *	Returns negative errno on error, or zero for success. * */int fbgen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    int err;    int oldxres, oldyres, oldbpp, oldxres_virtual, oldyres_virtual, oldyoffset;    struct fb_bitfield oldred, oldgreen, oldblue;    if ((err = fbgen_do_set_var(var, con == currcon, info2)))	return err;    if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {	oldxres = fb_display[con].var.xres;	oldyres = fb_display[con].var.yres;	oldxres_virtual = fb_display[con].var.xres_virtual;	oldyres_virtual = fb_display[con].var.yres_virtual;	oldbpp = fb_display[con].var.bits_per_pixel;	oldred = fb_display[con].var.red;	oldgreen = fb_display[con].var.green;	oldblue = fb_display[con].var.blue;	oldyoffset = fb_display[con].var.yoffset;	fb_display[con].var = *var;	if (oldxres != var->xres || oldyres != var->yres ||	    oldxres_virtual != var->xres_virtual ||	    oldyres_virtual != var->yres_virtual ||	    oldbpp != var->bits_per_pixel ||	    (!(memcmp(&oldred, &(var->red), sizeof(struct fb_bitfield)))) || 	    (!(memcmp(&oldgreen, &(var->green), sizeof(struct fb_bitfield)))) ||	    (!(memcmp(&oldblue, &(var->blue), sizeof(struct fb_bitfield)))) ||	    oldyoffset != var->yoffset) {	    fbgen_set_disp(con, info2);	    if (info->changevar)		(*info->changevar)(con);	    if ((err = fb_alloc_cmap(&fb_display[con].cmap, 0, 0)))		return err;	    fbgen_install_cmap(con, info2);	}    }    var->activate = 0;    return 0;}/** *	fbgen_get_cmap - get the colormap *	@cmap: frame buffer colormap structure *	@kspc: boolean, 0 copy local, 1 put_user() function *	@con: virtual console number *	@info: frame buffer info structure * *	Gets the colormap for virtual console @con and places it into *	@cmap for device @info. * *	Returns negative errno on error, or zero for success. * */int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,		   struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    if (con == currcon)			/* current console ? */	return fb_get_cmap(cmap, kspc, fbhw->getcolreg, info);    else	if (fb_display[con].cmap.len)	/* non default colormap ? */	    fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2);	else {	    int size = fb_display[con].var.bits_per_pixel == 16 ? 64 : 256;	    fb_copy_cmap(fb_default_cmap(size), cmap, kspc ? 0 : 2);	}    return 0;}/** *	fbgen_set_cmap - set the colormap *	@cmap: frame buffer colormap structure *	@kspc: boolean, 0 copy local, 1 get_user() function *	@con: virtual console number *	@info: frame buffer info structure * *	Sets the colormap @cmap for virtual console @con on *	device @info. * *	Returns negative errno on error, or zero for success. * */int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,		   struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    int err;    if (!fb_display[con].cmap.len) {	/* no colormap allocated ? */	int size = fb_display[con].var.bits_per_pixel == 16 ? 64 : 256;	if ((err = fb_alloc_cmap(&fb_display[con].cmap, size, 0)))	    return err;    }    if (con == currcon)			/* current console ? */	return fb_set_cmap(cmap, kspc, fbhw->setcolreg, info);    else	fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1);    return 0;}/** *	fbgen_pan_display - pan or wrap the display *	@var: frame buffer user defined part of display *	@con: virtual console number *	@info: frame buffer info structure * *	Pan or wrap virtual console @con for device @info. * *	This call looks only at xoffset, yoffset and the *	FB_VMODE_YWRAP flag in @var. * *	Returns negative errno on error, or zero for success. * */int fbgen_pan_display(struct fb_var_screeninfo *var, int con,		      struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    int xoffset = var->xoffset;    int yoffset = var->yoffset;    int err;    if (xoffset < 0 ||	xoffset+fb_display[con].var.xres > fb_display[con].var.xres_virtual ||	yoffset < 0 ||	yoffset+fb_display[con].var.yres > fb_display[con].var.yres_virtual)	return -EINVAL;    if (con == currcon) {	if (fbhw->pan_display) {	    if ((err = fbhw->pan_display(var, info2)))		return err;	} else	    return -EINVAL;    }    fb_display[con].var.xoffset = var->xoffset;    fb_display[con].var.yoffset = var->yoffset;    if (var->vmode & FB_VMODE_YWRAP)	fb_display[con].var.vmode |= FB_VMODE_YWRAP;    else	fb_display[con].var.vmode &= ~FB_VMODE_YWRAP;    return 0;}/* ---- Helper functions --------------------------------------------------- *//** *	fbgen_do_set_var - change the video mode *	@var: frame buffer user defined part of display *	@isactive: boolean, 0 inactive, 1 active *	@info: generic frame buffer info structure * *	Change the video mode settings for device @info.  If @isactive *	is non-zero, the changes will be activated immediately. * *	Return negative errno on error, or zero for success. * */int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,		     struct fb_info_gen *info){    struct fbgen_hwswitch *fbhw = info->fbhw;    int err, activate;    char par[info->parsize];    if ((err = fbhw->decode_var(var, &par, info)))	return err;    activate = var->activate;    if (((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) && isactive)	fbhw->set_par(&par, info);    fbhw->encode_var(var, &par, info);    var->activate = activate;    return 0;}/** *	fbgen_set_disp - set generic display *	@con: virtual console number *	@info: generic frame buffer info structure * *	Sets a display on virtual console @con for device @info. * */void fbgen_set_disp(int con, struct fb_info_gen *info){    struct fbgen_hwswitch *fbhw = info->fbhw;    struct fb_fix_screeninfo fix;    char par[info->parsize];    struct display *display;    if (con >= 0)	display = &fb_display[con];    else	display = info->info.disp;	/* used during initialization */    if (con == -1)	fbhw->get_par(&par, info);    else	fbhw->decode_var(&fb_display[con].var, &par, info);    memset(&fix, 0, sizeof(struct fb_fix_screeninfo));    fbhw->encode_fix(&fix, &par, info);    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;    if (info->fbhw->blank || fix.visual == FB_VISUAL_PSEUDOCOLOR ||	fix.visual == FB_VISUAL_DIRECTCOLOR)	display->can_soft_blank = 1;    else	display->can_soft_blank = 0;    fbhw->set_disp(&par, display, info);#if 0 /* FIXME: generic inverse is not supported yet */    display->inverse = (fix.visual == FB_VISUAL_MONO01 ? !inverse : inverse);#else    display->inverse = fix.visual == FB_VISUAL_MONO01;#endif}/** *	fbgen_install_cmap - install the current colormap *	@con: virtual console number *	@info: generic frame buffer info structure * *	Installs the current colormap for virtual console @con on *	device @info. * */void fbgen_install_cmap(int con, struct fb_info_gen *info){    struct fbgen_hwswitch *fbhw = info->fbhw;    if (con != currcon)	return;    if (fb_display[con].cmap.len)	fb_set_cmap(&fb_display[con].cmap, 1, fbhw->setcolreg, &info->info);    else {	int size = fb_display[con].var.bits_per_pixel == 16 ? 64 : 256;	fb_set_cmap(fb_default_cmap(size), 1, fbhw->setcolreg, &info->info);    }}/** *	fbgen_update_var - update user defined part of display *	@con: virtual console number *	@info: frame buffer info structure * *	Updates the user defined part of the display ('var' *	structure) on virtual console @con for device @info. *	This function is called by fbcon.c. * *	Returns negative errno on error, or zero for success. * */int fbgen_update_var(int con, struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    int err;    if (fbhw->pan_display) {        if ((err = fbhw->pan_display(&fb_display[con].var, info2)))            return err;    }    return 0;}/** *	fbgen_switch - switch to a different virtual console. *	@con: virtual console number *	@info: frame buffer info structure * *	Switch to virtuall console @con on device @info. * *	Returns zero. * */int fbgen_switch(int con, struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    /* Do we have to save the colormap ? */    if (fb_display[currcon].cmap.len)	fb_get_cmap(&fb_display[currcon].cmap, 1, fbhw->getcolreg,		    &info2->info);    fbgen_do_set_var(&fb_display[con].var, 1, info2);    currcon = con;    /* Install new colormap */    fbgen_install_cmap(con, info2);    return 0;}/** *	fbgen_blank - blank the screen *	@blank: boolean, 0 unblank, 1 blank *	@info: frame buffer info structure * *	Blank the screen on device @info. * */void fbgen_blank(int blank, struct fb_info *info){    struct fb_info_gen *info2 = (struct fb_info_gen *)info;    struct fbgen_hwswitch *fbhw = info2->fbhw;    u16 black[16];    struct fb_cmap cmap;    if (fbhw->blank && !fbhw->blank(blank, info2))	return;    if (blank) {	memset(black, 0, 16*sizeof(u16));	cmap.red = black;	cmap.green = black;	cmap.blue = black;	cmap.transp = NULL;	cmap.start = 0;	cmap.len = 16;	fb_set_cmap(&cmap, 1, fbhw->setcolreg, info);    } else	fbgen_install_cmap(currcon, info2);}MODULE_LICENSE("GPL");    /*     *  Visible symbols for modules     */EXPORT_SYMBOL(fbgen_get_var);EXPORT_SYMBOL(fbgen_get_cmap);EXPORT_SYMBOL(fbgen_get_fix);EXPORT_SYMBOL(fbgen_set_var);EXPORT_SYMBOL(fbgen_set_cmap);EXPORT_SYMBOL(fbgen_set_disp);EXPORT_SYMBOL(fbgen_install_cmap);EXPORT_SYMBOL(fbgen_pan_display);EXPORT_SYMBOL(fbgen_update_var);EXPORT_SYMBOL(fbgen_do_set_var);EXPORT_SYMBOL(fbgen_switch);EXPORT_SYMBOL(fbgen_blank);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费视频一区| 欧美精品视频www在线观看| 日韩精品高清不卡| 亚洲a一区二区| 亚洲综合激情小说| 亚欧色一区w666天堂| 亚洲第一久久影院| 日本欧洲一区二区| 久久99九九99精品| 国产精品一区二区在线播放 | 日本伦理一区二区| 91久久线看在观草草青青| 色94色欧美sute亚洲13| 欧美羞羞免费网站| 欧美一级理论性理论a| 制服.丝袜.亚洲.中文.综合| 制服丝袜日韩国产| 精品国产三级a在线观看| 精品88久久久久88久久久| 欧美激情中文字幕| 一区二区在线观看免费 | 精品久久久久久久人人人人传媒| 91精品国产一区二区三区蜜臀| 欧美videos大乳护士334| 久久色中文字幕| 亚洲色图在线视频| 蜜桃一区二区三区在线观看| 久久99热狠狠色一区二区| 成人精品国产福利| 欧美日韩五月天| 久久精品人人做人人爽97| 亚洲男同1069视频| 久久精品国产秦先生| eeuss影院一区二区三区| 欧美日韩视频在线第一区 | 日韩制服丝袜av| 成人免费精品视频| 91精品欧美久久久久久动漫| 国产精品免费人成网站| 性做久久久久久久免费看| 国产高清成人在线| 欧美精品乱码久久久久久| 国产亚洲一区二区三区四区| 国产一区亚洲一区| 欧美在线视频日韩| 欧美—级在线免费片| 日韩国产高清在线| 色嗨嗨av一区二区三区| 久久久精品欧美丰满| 日韩黄色免费网站| 一本在线高清不卡dvd| 久久久噜噜噜久久人人看| 亚洲gay无套男同| 成人免费高清视频| 2023国产精品自拍| 免费高清在线视频一区·| 91久久国产最好的精华液| 亚洲国产高清在线观看视频| 捆绑调教美女网站视频一区| 欧美日韩日本视频| 亚洲免费在线视频| 99免费精品视频| 中文字幕中文在线不卡住| 国产精品99久久久久久宅男| 91精品国产综合久久婷婷香蕉| 亚洲精品成a人| 色呦呦国产精品| 亚洲精品菠萝久久久久久久| 99久久精品国产一区| 国产精品高潮呻吟久久| 成人晚上爱看视频| 中文字幕不卡的av| 欧美成人午夜电影| 日本v片在线高清不卡在线观看| 欧美伊人精品成人久久综合97| 日韩美女精品在线| 91首页免费视频| 亚洲卡通动漫在线| 欧美少妇性性性| 午夜视频一区二区三区| 91精品中文字幕一区二区三区| 舔着乳尖日韩一区| 欧美成人r级一区二区三区| 麻豆视频观看网址久久| 久久夜色精品一区| 成人午夜碰碰视频| 尤物在线观看一区| 欧美日韩成人综合在线一区二区| 亚州成人在线电影| 欧美精品一区二区三区蜜桃视频| 国产麻豆精品一区二区| 亚洲国产高清不卡| 欧洲一区二区av| 免费视频最近日韩| 国产欧美一区二区三区在线看蜜臀| 国产精品自产自拍| 亚洲欧美激情在线| 91麻豆精品国产综合久久久久久| 激情另类小说区图片区视频区| 制服丝袜激情欧洲亚洲| 国产在线播放一区三区四| 国产视频一区不卡| 91在线播放网址| 日韩电影在线看| 欧美激情在线一区二区| 欧美私人免费视频| 狠狠久久亚洲欧美| 专区另类欧美日韩| 日韩美女视频在线| 丰满白嫩尤物一区二区| 亚洲一区二区欧美日韩| 久久久精品黄色| 欧美日韩大陆一区二区| 成人精品视频一区二区三区| 亚洲成人资源网| 国产精品久久久久久久久图文区| 欧美日韩亚洲不卡| av在线播放不卡| 精品制服美女丁香| 亚洲国产人成综合网站| 亚洲国产岛国毛片在线| 日韩欧美在线不卡| 91精品91久久久中77777| 国产精品香蕉一区二区三区| 亚洲在线中文字幕| 国产精品欧美久久久久一区二区| 欧美一区二区在线免费观看| 日韩欧美电影在线| 欧美色国产精品| 不卡电影免费在线播放一区| 麻豆一区二区三区| 日韩高清一区二区| 伊人夜夜躁av伊人久久| 国产精品污www在线观看| 欧美videos大乳护士334| 在线播放中文一区| 欧美日韩综合在线| 色哟哟国产精品| 91美女在线视频| 成人精品鲁一区一区二区| 国产精品911| 国产在线精品一区在线观看麻豆| 香蕉av福利精品导航| 亚洲精品成人a在线观看| 1024成人网色www| 国产精品女同一区二区三区| 国产网红主播福利一区二区| 精品免费国产二区三区| 欧美成人在线直播| 日韩一卡二卡三卡| 日韩视频一区二区三区| 91精品欧美综合在线观看最新| 欧美视频在线播放| 欧美日韩亚洲高清一区二区| 欧美午夜精品理论片a级按摩| 色综合久久66| 在线免费观看成人短视频| 日本丰满少妇一区二区三区| 一本大道久久a久久精二百| 91久久精品日日躁夜夜躁欧美| 在线观看日韩毛片| 欧美日韩高清影院| 日韩欧美精品在线视频| 久久久午夜电影| 国产欧美日韩亚州综合 | 91麻豆免费看| 欧美亚洲国产一区二区三区va | 激情成人午夜视频| 国产成人8x视频一区二区| 成人h动漫精品一区二区| 91香蕉视频黄| 欧美巨大另类极品videosbest | 国产欧美一区二区精品婷婷 | 久久午夜色播影院免费高清| 国产欧美一区二区精品久导航| 自拍偷拍亚洲综合| 视频在线观看一区二区三区| 日韩精品视频网站| 国产91精品露脸国语对白| 在线视频一区二区免费| 欧美一区二区啪啪| 国产精品不卡一区| 日韩高清不卡在线| 国产精品91xxx| 欧美日韩午夜在线视频| 久久精品欧美日韩精品 | 精品国产91亚洲一区二区三区婷婷 | 在线综合视频播放| 国产清纯在线一区二区www| 亚洲永久免费视频| 国产最新精品免费| 欧美中文字幕一区二区三区亚洲| 91精品在线一区二区| 中文字幕在线播放不卡一区| 七七婷婷婷婷精品国产| 99久久免费视频.com| 日韩欧美一区二区视频| 亚洲男帅同性gay1069| 国内精品伊人久久久久影院对白| 色哟哟国产精品|