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

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

?? ps3fb.c

?? Linux環境下視頻顯示卡設備的驅動程序源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
			     u32 height, u32 dst_line_length,			     u32 src_line_length){	int status;	u64 line_length;	line_length = dst_line_length;	if (src_line_length != dst_line_length)		line_length |= (u64)src_line_length << 32;	src_offset += GPU_FB_START;	mutex_lock(&ps3_gpu_mutex);	status = lv1_gpu_context_attribute(ps3fb.context_handle,					   L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT,					   dst_offset, GPU_IOIF + src_offset,					   L1GPU_FB_BLIT_WAIT_FOR_COMPLETION |					   (width << 16) | height,					   line_length);	mutex_unlock(&ps3_gpu_mutex);	if (status)		dev_err(dev,			"%s: lv1_gpu_context_attribute FB_BLIT failed: %d\n",			__func__, status);#ifdef HEAD_A	status = lv1_gpu_context_attribute(ps3fb.context_handle,					   L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_FLIP,					   0, frame_offset, 0, 0);	if (status)		dev_err(dev, "%s: lv1_gpu_context_attribute FLIP failed: %d\n",			__func__, status);#endif#ifdef HEAD_B	status = lv1_gpu_context_attribute(ps3fb.context_handle,					   L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_FLIP,					   1, frame_offset, 0, 0);	if (status)		dev_err(dev, "%s: lv1_gpu_context_attribute FLIP failed: %d\n",			__func__, status);#endif}static int ps3fb_sync(struct fb_info *info, u32 frame){	struct ps3fb_par *par = info->par;	int error = 0;	u64 ddr_base, xdr_base;	if (frame > par->num_frames - 1) {		dev_dbg(info->device, "%s: invalid frame number (%u)\n",			__func__, frame);		error = -EINVAL;		goto out;	}	xdr_base = frame * par->xdr_frame_size;	ddr_base = frame * par->ddr_frame_size;	ps3fb_sync_image(info->device, ddr_base + par->full_offset,			 ddr_base + par->fb_offset, xdr_base + par->pan_offset,			 par->width, par->height, par->ddr_line_length,			 info->fix.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;	mode = ps3fb_find_mode(var, &ddr_line_length, &xdr_line_length);	if (!mode)		return -EINVAL;	/* Virtual screen */	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 > info->fix.smem_len) {		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;	unsigned int ddr_xoff, ddr_yoff, offset;	const struct fb_videomode *vmode;	u64 dst;	mode = ps3fb_find_mode(&info->var, &ddr_line_length, &xdr_line_length);	if (!mode)		return -EINVAL;	vmode = ps3fb_native_vmode(mode & PS3AV_MODE_MASK);	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;	par->ddr_line_length = ddr_line_length;	par->ddr_frame_size = vmode->yres * ddr_line_length;	par->xdr_frame_size = info->var.yres_virtual * xdr_line_length;	par->num_frames = info->fix.smem_len /			  max(par->ddr_frame_size, par->xdr_frame_size);	/* 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;	/* Start of the virtual frame buffer (relative to fullscreen) */	ddr_xoff = info->var.left_margin - vmode->left_margin;	ddr_yoff = info->var.upper_margin - vmode->upper_margin;	offset = ddr_yoff * ddr_line_length + ddr_xoff * BPP;	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((void __force *)info->screen_base, 0, info->fix.smem_len);	/* Clear DDR frame buffer memory */	lines = vmode->yres * par->num_frames;	if (par->full_offset)		lines++;	maxlines = info->fix.smem_len / 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, vmode->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;}    /*     * 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 *vmode;			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;			vmode = ps3fb_vmode(val);			if (vmode) {				var = info->var;				fb_videomode_to_var(&var, vmode);				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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区蜜月| 久久99久久久久| 日韩专区一卡二卡| 丰满岳乱妇一区二区三区 | 亚洲男人的天堂网| 蜜臀va亚洲va欧美va天堂| 91在线视频18| 国产欧美日韩麻豆91| 日本美女视频一区二区| 在线免费观看成人短视频| 国产亚洲精品久| 激情六月婷婷久久| 日韩欧美色综合网站| 亚洲成人自拍偷拍| 91久久精品一区二区二区| 中文字幕第一区| 成人在线视频首页| 国产午夜亚洲精品午夜鲁丝片 | 国产成人精品免费看| 91精品国产免费久久综合| 亚洲国产精品天堂| 欧美午夜一区二区| 亚洲国产精品久久人人爱蜜臀| 99热在这里有精品免费| 国产精品初高中害羞小美女文| 激情五月播播久久久精品| 欧美一区二区在线播放| 午夜精品一区二区三区电影天堂| 欧美性色综合网| 丝袜美腿亚洲一区| 日韩午夜av电影| 美女www一区二区| www成人在线观看| 国产精品一二二区| 欧美国产一区二区在线观看| 国产a区久久久| 亚洲欧洲精品一区二区三区| 91丨九色丨黑人外教| 一区二区三区精品| 欧美三级日韩三级国产三级| 性做久久久久久| 日韩丝袜情趣美女图片| 狠狠色伊人亚洲综合成人| 久久网站最新地址| 成人午夜电影久久影院| 一区二区三区av电影| 色天天综合色天天久久| 一区二区三区在线视频观看58| 欧美自拍偷拍一区| 亚洲成人中文在线| 日韩亚洲欧美成人一区| 国产一区二区三区电影在线观看 | 国产福利精品导航| 中文字幕在线不卡视频| 欧美曰成人黄网| 美日韩一级片在线观看| 国产精品久久久久久福利一牛影视 | 欧美日韩精品一区二区三区四区| 日韩精品视频网站| 中文字幕精品—区二区四季| 91色婷婷久久久久合中文| 天堂在线一区二区| 欧美国产激情一区二区三区蜜月| 972aa.com艺术欧美| 免费观看一级特黄欧美大片| 国产日韩欧美精品综合| 欧美性xxxxxxxx| 国产91露脸合集magnet| 午夜精品影院在线观看| 中文字幕+乱码+中文字幕一区| 欧美日韩综合在线| 国产xxx精品视频大全| 亚洲aaa精品| 中文字幕不卡三区| 欧美mv日韩mv| 欧美日韩一区二区三区免费看| 国产精品中文字幕日韩精品 | 久久草av在线| 亚洲精品伦理在线| 国产日产欧美一区| 91精品久久久久久久99蜜桃| 91在线播放网址| 国产在线精品一区二区夜色| 亚洲激情第一区| 亚洲国产成人在线| 精品久久人人做人人爽| 在线电影国产精品| 色综合久久88色综合天天 | 国产精品久久久久国产精品日日| 欧美精品丝袜久久久中文字幕| 成人小视频在线观看| 麻豆国产精品777777在线| 伊人婷婷欧美激情| 国产精品成人免费| 久久久久9999亚洲精品| 欧美一区二区在线播放| 欧美伊人精品成人久久综合97| av欧美精品.com| 成人免费毛片app| 国产成人鲁色资源国产91色综 | 国产欧美一区二区精品秋霞影院| 欧美三区在线观看| 欧美影片第一页| 日本黄色一区二区| 日本道免费精品一区二区三区| 成人av在线电影| 国产九色sp调教91| 久久99精品久久久久婷婷| 午夜电影一区二区三区| 亚洲成人tv网| 青娱乐精品在线视频| 丝袜诱惑亚洲看片| 男人的天堂亚洲一区| 日韩精品福利网| 麻豆精品视频在线观看免费| 麻豆国产精品官网| 国产成人日日夜夜| 9i在线看片成人免费| 99国产精品久久久| 在线精品亚洲一区二区不卡| 色综合天天综合色综合av | 欧美性xxxxxxxx| 在线91免费看| 欧美大片顶级少妇| 欧美国产禁国产网站cc| 亚洲天堂久久久久久久| 亚洲午夜国产一区99re久久| 首页亚洲欧美制服丝腿| 免费在线看成人av| 国产成人aaaa| 在线观看一区二区视频| 欧美一区二区三区公司| 久久综合色之久久综合| 亚洲欧美在线高清| 午夜国产精品一区| 国产精品2024| 欧美系列一区二区| 精品国产区一区| 亚洲免费资源在线播放| 日韩av中文字幕一区二区| 国产成人综合亚洲网站| 一本久久综合亚洲鲁鲁五月天| 欧美人体做爰大胆视频| 久久久亚洲精华液精华液精华液| 国产精品美女久久久久aⅴ国产馆| 亚洲一区在线视频| 精品影院一区二区久久久| 99v久久综合狠狠综合久久| 欧美日韩第一区日日骚| 国产网站一区二区三区| 亚洲二区在线视频| 国产成人亚洲综合a∨婷婷图片 | 国产91对白在线观看九色| 在线这里只有精品| 久久人人爽爽爽人久久久| 亚洲一区二区三区精品在线| 国产自产v一区二区三区c| 色综合激情五月| 国产亚洲精品aa午夜观看| 亚洲高清三级视频| 成人99免费视频| 欧美xxx久久| 亚洲国产精品尤物yw在线观看| 春色校园综合激情亚洲| 欧美一区二区免费| 一区二区在线观看av| 国产成人午夜视频| 精品毛片乱码1区2区3区| 一卡二卡三卡日韩欧美| 国产成人综合视频| 日韩午夜在线观看| 午夜a成v人精品| 在线视频一区二区免费| 亚洲啪啪综合av一区二区三区| 久久99久久99精品免视看婷婷 | 久久九九99视频| 免费一级片91| 欧美色综合网站| 亚洲欧洲三级电影| 成人免费高清视频在线观看| 久久综合久色欧美综合狠狠| 欧美a级理论片| 欧美精品九九99久久| 亚洲国产视频在线| 欧美亚洲精品一区| 亚洲综合在线视频| 色偷偷成人一区二区三区91| 国产精品麻豆欧美日韩ww| 国产在线精品免费av| 欧美tk—视频vk| 国产综合色产在线精品 | 日韩精品在线一区| 蜜臀va亚洲va欧美va天堂| 日韩一本二本av| 久久精品国产免费| 久久综合久久综合久久综合| 精品在线播放免费| 欧美极品aⅴ影院| 成人av影院在线| 一区二区三区毛片|