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

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

?? ps3fb.c

?? linux 內(nèi)核源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	if (frame > par->num_frames - 1) {		dev_dbg(info->device, "%s: invalid frame number (%u)\n",			__func__, frame);		error = -EINVAL;		goto out;	}	i = par->res_index;	xdr_line_length = info->fix.line_length;	ddr_line_length = ps3fb_res[i].xres * BPP;	xdr_base = frame * info->var.yres_virtual * xdr_line_length;	ddr_base = frame * ps3fb_res[i].yres * ddr_line_length;	ps3fb_sync_image(info->device, ddr_base + par->full_offset,			 ddr_base + par->fb_offset, xdr_base + par->pan_offset,			 par->width, par->height, ddr_line_length,			 xdr_line_length);out:	return error;}static int ps3fb_open(struct fb_info *info, int user){	atomic_inc(&ps3fb.f_count);	return 0;}static int ps3fb_release(struct fb_info *info, int user){	if (atomic_dec_and_test(&ps3fb.f_count)) {		if (atomic_read(&ps3fb.ext_flip)) {			atomic_set(&ps3fb.ext_flip, 0);			if (!try_acquire_console_sem()) {				ps3fb_sync(info, 0);	/* single buffer */				release_console_sem();			}		}	}	return 0;}    /*     *  Setting the video mode has been split into two parts.     *  First part, xxxfb_check_var, must not write anything     *  to hardware, it should only verify and adjust var.     *  This means it doesn't alter par but it does use hardware     *  data from it to check this var.     */static int ps3fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info){	u32 xdr_line_length, ddr_line_length;	int mode;	dev_dbg(info->device, "var->xres:%u info->var.xres:%u\n", var->xres,		info->var.xres);	dev_dbg(info->device, "var->yres:%u info->var.yres:%u\n", var->yres,		info->var.yres);	/* FIXME For now we do exact matches only */	mode = ps3fb_find_mode(var, &ddr_line_length, &xdr_line_length);	if (!mode)		return -EINVAL;	/* Virtual screen */	if (var->xres_virtual < var->xres)		var->xres_virtual = var->xres;	if (var->yres_virtual < var->yres)		var->yres_virtual = var->yres;	if (var->xres_virtual > xdr_line_length / BPP) {		dev_dbg(info->device,			"Horizontal virtual screen size too large\n");		return -EINVAL;	}	if (var->xoffset + var->xres > var->xres_virtual ||	    var->yoffset + var->yres > var->yres_virtual) {		dev_dbg(info->device, "panning out-of-range\n");		return -EINVAL;	}	/* We support ARGB8888 only */	if (var->bits_per_pixel > 32 || var->grayscale ||	    var->red.offset > 16 || var->green.offset > 8 ||	    var->blue.offset > 0 || var->transp.offset > 24 ||	    var->red.length > 8 || var->green.length > 8 ||	    var->blue.length > 8 || var->transp.length > 8 ||	    var->red.msb_right || var->green.msb_right ||	    var->blue.msb_right || var->transp.msb_right || var->nonstd) {		dev_dbg(info->device, "We support ARGB8888 only\n");		return -EINVAL;	}	var->bits_per_pixel = 32;	var->red.offset = 16;	var->green.offset = 8;	var->blue.offset = 0;	var->transp.offset = 24;	var->red.length = 8;	var->green.length = 8;	var->blue.length = 8;	var->transp.length = 8;	var->red.msb_right = 0;	var->green.msb_right = 0;	var->blue.msb_right = 0;	var->transp.msb_right = 0;	/* Rotation is not supported */	if (var->rotate) {		dev_dbg(info->device, "Rotation is not supported\n");		return -EINVAL;	}	/* Memory limit */	if (var->yres_virtual * xdr_line_length > ps3fb.xdr_size) {		dev_dbg(info->device, "Not enough memory\n");		return -ENOMEM;	}	var->height = -1;	var->width = -1;	return 0;}    /*     * This routine actually sets the video mode.     */static int ps3fb_set_par(struct fb_info *info){	struct ps3fb_par *par = info->par;	unsigned int mode, ddr_line_length, xdr_line_length, lines, maxlines;	int i;	unsigned long offset;	u64 dst;	dev_dbg(info->device, "xres:%d xv:%d yres:%d yv:%d clock:%d\n",		info->var.xres, info->var.xres_virtual,		info->var.yres, info->var.yres_virtual, info->var.pixclock);	mode = ps3fb_find_mode(&info->var, &ddr_line_length, &xdr_line_length);	if (!mode)		return -EINVAL;	i = ps3fb_get_res_table(info->var.xres, info->var.yres, mode);	par->res_index = i;	info->fix.smem_start = virt_to_abs(ps3fb.xdr_ea);	info->fix.smem_len = ps3fb.xdr_size;	info->fix.xpanstep = info->var.xres_virtual > info->var.xres ? 1 : 0;	info->fix.ypanstep = info->var.yres_virtual > info->var.yres ? 1 : 0;	info->fix.line_length = xdr_line_length;	info->screen_base = (char __iomem *)ps3fb.xdr_ea;	par->num_frames = ps3fb.xdr_size /			  max(ps3fb_res[i].yres * ddr_line_length,			      info->var.yres_virtual * xdr_line_length);	/* Keep the special bits we cannot set using fb_var_screeninfo */	par->new_mode_id = (par->new_mode_id & ~PS3AV_MODE_MASK) | mode;	par->width = info->var.xres;	par->height = info->var.yres;	offset = VP_OFF(i);	par->fb_offset = GPU_ALIGN_UP(offset);	par->full_offset = par->fb_offset - offset;	par->pan_offset = info->var.yoffset * xdr_line_length +			  info->var.xoffset * BPP;	if (par->new_mode_id != par->mode_id) {		if (ps3av_set_video_mode(par->new_mode_id)) {			par->new_mode_id = par->mode_id;			return -EINVAL;		}		par->mode_id = par->new_mode_id;	}	/* Clear XDR frame buffer memory */	memset(ps3fb.xdr_ea, 0, ps3fb.xdr_size);	/* Clear DDR frame buffer memory */	lines = ps3fb_res[i].yres * par->num_frames;	if (par->full_offset)		lines++;	maxlines = ps3fb.xdr_size / ddr_line_length;	for (dst = 0; lines; dst += maxlines * ddr_line_length) {		unsigned int l = min(lines, maxlines);		ps3fb_sync_image(info->device, 0, dst, 0, ps3fb_res[i].xres, l,				 ddr_line_length, ddr_line_length);		lines -= l;	}	return 0;}    /*     *  Set a single color register. The values supplied are already     *  rounded down to the hardware's capabilities (according to the     *  entries in the var structure). Return != 0 for invalid regno.     */static int ps3fb_setcolreg(unsigned int regno, unsigned int red,			   unsigned int green, unsigned int blue,			   unsigned int transp, struct fb_info *info){	if (regno >= 16)		return 1;	red >>= 8;	green >>= 8;	blue >>= 8;	transp >>= 8;	((u32 *)info->pseudo_palette)[regno] = transp << 24 | red << 16 |					       green << 8 | blue;	return 0;}static int ps3fb_pan_display(struct fb_var_screeninfo *var,			     struct fb_info *info){	struct ps3fb_par *par = info->par;	par->pan_offset = var->yoffset * info->fix.line_length +			  var->xoffset * BPP;	return 0;}    /*     *  As we have a virtual frame buffer, we need our own mmap function     */static int ps3fb_mmap(struct fb_info *info, struct vm_area_struct *vma){	unsigned long size, offset;	size = vma->vm_end - vma->vm_start;	offset = vma->vm_pgoff << PAGE_SHIFT;	if (offset + size > info->fix.smem_len)		return -EINVAL;	offset += info->fix.smem_start;	if (remap_pfn_range(vma, vma->vm_start, offset >> PAGE_SHIFT,			    size, vma->vm_page_prot))		return -EAGAIN;	dev_dbg(info->device, "ps3fb: mmap framebuffer P(%lx)->V(%lx)\n",		offset, vma->vm_start);	return 0;}    /*     * Blank the display     */static int ps3fb_blank(int blank, struct fb_info *info){	int retval;	dev_dbg(info->device, "%s: blank:%d\n", __func__, blank);	switch (blank) {	case FB_BLANK_POWERDOWN:	case FB_BLANK_HSYNC_SUSPEND:	case FB_BLANK_VSYNC_SUSPEND:	case FB_BLANK_NORMAL:		retval = ps3av_video_mute(1);	/* mute on */		if (!retval)			ps3fb.is_blanked = 1;		break;	default:		/* unblank */		retval = ps3av_video_mute(0);	/* mute off */		if (!retval)			ps3fb.is_blanked = 0;		break;	}	return retval;}static int ps3fb_get_vblank(struct fb_vblank *vblank){	memset(vblank, 0, sizeof(*vblank));	vblank->flags = FB_VBLANK_HAVE_VSYNC;	return 0;}static int ps3fb_wait_for_vsync(u32 crtc){	int ret;	u64 count;	count = ps3fb.vblank_count;	ret = wait_event_interruptible_timeout(ps3fb.wait_vsync,					       count != ps3fb.vblank_count,					       HZ / 10);	if (!ret)		return -ETIMEDOUT;	return 0;}static void ps3fb_flip_ctl(int on, void *data){	struct ps3fb_priv *priv = data;	if (on)		atomic_dec_if_positive(&priv->ext_flip);	else		atomic_inc(&priv->ext_flip);}    /*     * ioctl     */static int ps3fb_ioctl(struct fb_info *info, unsigned int cmd,		       unsigned long arg){	void __user *argp = (void __user *)arg;	u32 val;	int retval = -EFAULT;	switch (cmd) {	case FBIOGET_VBLANK:		{			struct fb_vblank vblank;			dev_dbg(info->device, "FBIOGET_VBLANK:\n");			retval = ps3fb_get_vblank(&vblank);			if (retval)				break;			if (copy_to_user(argp, &vblank, sizeof(vblank)))				retval = -EFAULT;			break;		}	case FBIO_WAITFORVSYNC:		{			u32 crt;			dev_dbg(info->device, "FBIO_WAITFORVSYNC:\n");			if (get_user(crt, (u32 __user *) arg))				break;			retval = ps3fb_wait_for_vsync(crt);			break;		}	case PS3FB_IOCTL_SETMODE:		{			struct ps3fb_par *par = info->par;			const struct fb_videomode *mode;			struct fb_var_screeninfo var;			if (copy_from_user(&val, argp, sizeof(val)))				break;			if (!(val & PS3AV_MODE_MASK)) {				u32 id = ps3av_get_auto_mode();				if (id > 0)					val = (val & ~PS3AV_MODE_MASK) | id;			}			dev_dbg(info->device, "PS3FB_IOCTL_SETMODE:%x\n", val);			retval = -EINVAL;			mode = ps3fb_default_mode(val);			if (mode) {				var = info->var;				fb_videomode_to_var(&var, mode);				acquire_console_sem();				info->flags |= FBINFO_MISC_USEREVENT;				/* Force, in case only special bits changed */				var.activate |= FB_ACTIVATE_FORCE;				par->new_mode_id = val;				retval = fb_set_var(info, &var);				info->flags &= ~FBINFO_MISC_USEREVENT;				release_console_sem();			}			break;		}	case PS3FB_IOCTL_GETMODE:		val = ps3av_get_mode();		dev_dbg(info->device, "PS3FB_IOCTL_GETMODE:%x\n", val);		if (!copy_to_user(argp, &val, sizeof(val)))			retval = 0;		break;	case PS3FB_IOCTL_SCREENINFO:		{			struct ps3fb_par *par = info->par;			struct ps3fb_ioctl_res res;			dev_dbg(info->device, "PS3FB_IOCTL_SCREENINFO:\n");			res.xres = info->fix.line_length / BPP;			res.yres = info->var.yres_virtual;			res.xoff = (res.xres - info->var.xres) / 2;			res.yoff = (res.yres - info->var.yres) / 2;			res.num_frames = par->num_frames;			if (!copy_to_user(argp, &res, sizeof(res)))				retval = 0;			break;		}	case PS3FB_IOCTL_ON:		dev_dbg(info->device, "PS3FB_IOCTL_ON:\n");		atomic_inc(&ps3fb.ext_flip);		retval = 0;		break;	case PS3FB_IOCTL_OFF:		dev_dbg(info->device, "PS3FB_IOCTL_OFF:\n");		atomic_dec_if_positive(&ps3fb.ext_flip);		retval = 0;		break;	case PS3FB_IOCTL_FSEL:		if (copy_from_user(&val, argp, sizeof(val)))			break;		dev_dbg(info->device, "PS3FB_IOCTL_FSEL:%d\n", val);		acquire_console_sem();		retval = ps3fb_sync(info, val);		release_console_sem();		break;	default:		retval = -ENOIOCTLCMD;		break;	}	return retval;}static int ps3fbd(void *arg){	struct fb_info *info = arg;	set_freezable();	while (!kthread_should_stop()) {		try_to_freeze();		set_current_state(TASK_INTERRUPTIBLE);		if (ps3fb.is_kicked) {			ps3fb.is_kicked = 0;			acquire_console_sem();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人性战久久| 国产欧美一区二区精品忘忧草| 经典一区二区三区| 一色屋精品亚洲香蕉网站| 9191成人精品久久| 成人成人成人在线视频| 美女任你摸久久| 亚洲三级久久久| 欧美tk—视频vk| 色婷婷久久久久swag精品| 国产一区二区三区国产| 午夜视频在线观看一区| 亚洲婷婷综合色高清在线| 精品国产三级电影在线观看| 欧美日韩一区二区三区不卡| 成人va在线观看| 国产一区二区不卡在线| 三级成人在线视频| 亚洲另类一区二区| 久久亚洲一区二区三区明星换脸| 欧美日韩久久久一区| 色视频一区二区| 成人午夜免费av| 国模套图日韩精品一区二区| 欧美人狂配大交3d怪物一区| 波多野结衣精品在线| 精品系列免费在线观看| 奇米精品一区二区三区在线观看| 亚洲综合偷拍欧美一区色| 亚洲欧洲精品一区二区三区| 日本一区二区久久| 久久久久亚洲综合| 亚洲精品在线免费观看视频| 日韩欧美中文字幕一区| 欧美丰满嫩嫩电影| 欧美性生活久久| 一本久久精品一区二区| 91福利在线导航| 欧亚洲嫩模精品一区三区| 欧美亚洲综合色| 欧美日本一区二区三区四区| 精品视频999| 欧美另类久久久品| 5月丁香婷婷综合| 日韩欧美国产综合在线一区二区三区| 7777精品伊人久久久大香线蕉| 欧美日韩aaaaaa| 日韩精品一区二区三区视频在线观看| 日韩一区二区三区电影| 精品久久久久久无| 国产日韩一级二级三级| 国产精品久久午夜夜伦鲁鲁| 亚洲丝袜制服诱惑| 亚洲黄色尤物视频| 日韩有码一区二区三区| 美女视频黄 久久| 国产成人高清在线| 成人aa视频在线观看| 99精品欧美一区二区三区综合在线| 99久久国产综合精品女不卡| 免费观看在线综合| 国产精品99久久久久久久女警| 成人性生交大片免费| eeuss影院一区二区三区| 一本大道久久a久久综合| 91久久国产最好的精华液| 欧美美女黄视频| 日韩一区二区三区免费观看| 国产欧美精品区一区二区三区| 亚洲欧洲精品一区二区三区不卡| 亚洲男人电影天堂| 亚洲午夜电影网| 精品一区二区免费在线观看| 国产精品一级二级三级| 91蜜桃免费观看视频| 欧美性大战久久久久久久| 精品少妇一区二区三区在线视频| 久久综合色婷婷| 亚洲精品在线三区| 国产精品久久久久久久久快鸭| 国产精品伦一区| 亚洲一区二区在线免费观看视频| 日本不卡在线视频| 国产精品夜夜嗨| 色婷婷久久久久swag精品| 3atv一区二区三区| 欧美变态口味重另类| 国产嫩草影院久久久久| 中文字幕在线不卡一区二区三区| 亚洲午夜精品在线| 精品无人码麻豆乱码1区2区 | 91精品国产入口| 久久久久久久久久美女| 亚洲人快播电影网| 久久99在线观看| 色中色一区二区| 欧美精品一区二区三| 最近中文字幕一区二区三区| 精品一区二区三区的国产在线播放 | 欧美精品一区二区不卡| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 精品国产乱码久久久久久牛牛| 亚洲视频每日更新| 视频一区在线视频| 91极品视觉盛宴| 久久婷婷色综合| 日韩综合小视频| 成人毛片在线观看| 久久精品一区八戒影视| 亚洲高清免费在线| 日本精品裸体写真集在线观看| 精品久久久久久综合日本欧美| 香蕉成人伊视频在线观看| 成人国产精品免费网站| 久久精品亚洲国产奇米99| 亚洲在线视频免费观看| 97久久人人超碰| 久久久亚洲精品石原莉奈| 蜜臀久久99精品久久久画质超高清| 99久久99久久综合| 国产亚洲精品资源在线26u| 日韩中文欧美在线| 在线成人免费观看| 亚洲欧美另类综合偷拍| 成人v精品蜜桃久久一区| 精品电影一区二区三区| 毛片av一区二区三区| 在线观看一区不卡| 亚洲综合在线观看视频| 国产在线观看一区二区| 久久综合久色欧美综合狠狠| 亚洲一区二区三区在线看| 色天天综合久久久久综合片| 欧美日韩精品欧美日韩精品一综合| 亚洲码国产岛国毛片在线| 亚洲va中文字幕| 欧美日韩激情一区| 精品va天堂亚洲国产| 久久电影网站中文字幕| 欧美变态tickle挠乳网站| 亚洲1区2区3区视频| 欧美区在线观看| 亚洲永久免费视频| 欧美体内she精高潮| 亚洲国产裸拍裸体视频在线观看乱了| 日本乱人伦aⅴ精品| 亚洲视频免费看| 欧美性猛片xxxx免费看久爱| 亚洲免费在线电影| 在线欧美日韩精品| 一区二区三区在线免费播放| 欧美猛男男办公室激情| 天天av天天翘天天综合网色鬼国产| 欧美精品乱人伦久久久久久| 天堂av在线一区| 精品1区2区在线观看| 激情久久五月天| 国产精品网友自拍| 国产成人a级片| 亚洲美腿欧美偷拍| 欧美一区二区视频免费观看| 奇米亚洲午夜久久精品| 国产欧美一区二区精品性色超碰| 国产美女在线精品| 伊人色综合久久天天人手人婷| 91精彩视频在线| 麻豆91精品视频| 精品国产一区久久| 91麻豆精品秘密| 亚洲综合免费观看高清完整版在线| 制服丝袜成人动漫| 日韩国产欧美三级| 日本一区二区三区四区| 国产精品成人网| 一区二区三区在线视频观看58 | 五月激情六月综合| 26uuu另类欧美| 国产91清纯白嫩初高中在线观看| 亚洲欧洲精品一区二区三区| 91免费国产在线观看| 欧美疯狂做受xxxx富婆| 国产精品一区二区免费不卡| 国产精品另类一区| 欧美精选在线播放| 国产真实精品久久二三区| 亚洲人吸女人奶水| 91精品综合久久久久久| 成人h版在线观看| 亚洲精品第一国产综合野| 精品国精品自拍自在线| 色综合一区二区| 国产一区二区三区日韩 | 欧美性猛交xxxx乱大交退制版 | 欧美怡红院视频| 喷水一区二区三区| 中文字幕一区二区三区不卡在线| 制服丝袜中文字幕一区| 不卡影院免费观看| 欧美aaaaaa午夜精品| 亚洲综合一区二区精品导航|