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

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

?? ps3fb.c

?? linux 內核源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *  linux/drivers/video/ps3fb.c -- PS3 GPU frame buffer device * *	Copyright (C) 2006 Sony Computer Entertainment Inc. *	Copyright 2006, 2007 Sony Corporation * *  This file is based on : * *  linux/drivers/video/vfb.c -- Virtual frame buffer device * *	Copyright (C) 2002 James Simmons * *	Copyright (C) 1997 Geert Uytterhoeven * *  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/kernel.h>#include <linux/errno.h>#include <linux/string.h>#include <linux/mm.h>#include <linux/interrupt.h>#include <linux/console.h>#include <linux/ioctl.h>#include <linux/kthread.h>#include <linux/freezer.h>#include <linux/uaccess.h>#include <linux/fb.h>#include <linux/init.h>#include <asm/abs_addr.h>#include <asm/lv1call.h>#include <asm/ps3av.h>#include <asm/ps3fb.h>#include <asm/ps3.h>#define DEVICE_NAME		"ps3fb"#define L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_SYNC	0x101#define L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_FLIP	0x102#define L1GPU_CONTEXT_ATTRIBUTE_FB_SETUP	0x600#define L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT		0x601#define L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT_SYNC	0x602#define L1GPU_FB_BLIT_WAIT_FOR_COMPLETION	(1ULL << 32)#define L1GPU_DISPLAY_SYNC_HSYNC		1#define L1GPU_DISPLAY_SYNC_VSYNC		2#define GPU_CMD_BUF_SIZE			(2 * 1024 * 1024)#define GPU_FB_START				(64 * 1024)#define GPU_IOIF				(0x0d000000UL)#define GPU_ALIGN_UP(x)				_ALIGN_UP((x), 64)#define GPU_MAX_LINE_LENGTH			(65536 - 64)#define PS3FB_FULL_MODE_BIT			0x80#define GPU_INTR_STATUS_VSYNC_0			0	/* vsync on head A */#define GPU_INTR_STATUS_VSYNC_1			1	/* vsync on head B */#define GPU_INTR_STATUS_FLIP_0			3	/* flip head A */#define GPU_INTR_STATUS_FLIP_1			4	/* flip head B */#define GPU_INTR_STATUS_QUEUE_0			5	/* queue head A */#define GPU_INTR_STATUS_QUEUE_1			6	/* queue head B */#define GPU_DRIVER_INFO_VERSION			0x211/* gpu internals */struct display_head {	u64 be_time_stamp;	u32 status;	u32 offset;	u32 res1;	u32 res2;	u32 field;	u32 reserved1;	u64 res3;	u32 raster;	u64 vblank_count;	u32 field_vsync;	u32 reserved2;};struct gpu_irq {	u32 irq_outlet;	u32 status;	u32 mask;	u32 video_cause;	u32 graph_cause;	u32 user_cause;	u32 res1;	u64 res2;	u32 reserved[4];};struct gpu_driver_info {	u32 version_driver;	u32 version_gpu;	u32 memory_size;	u32 hardware_channel;	u32 nvcore_frequency;	u32 memory_frequency;	u32 reserved[1063];	struct display_head display_head[8];	struct gpu_irq irq;};struct ps3fb_priv {	unsigned int irq_no;	u64 context_handle, memory_handle;	void *xdr_ea;	size_t xdr_size;	struct gpu_driver_info *dinfo;	u64 vblank_count;	/* frame count */	wait_queue_head_t wait_vsync;	atomic_t ext_flip;	/* on/off flip with vsync */	atomic_t f_count;	/* fb_open count */	int is_blanked;	int is_kicked;	struct task_struct *task;};static struct ps3fb_priv ps3fb;struct ps3fb_par {	u32 pseudo_palette[16];	int mode_id, new_mode_id;	int res_index;	unsigned int num_frames;	/* num of frame buffers */	unsigned int width;	unsigned int height;	unsigned long full_offset;	/* start of fullscreen DDR fb */	unsigned long fb_offset;	/* start of actual DDR fb */	unsigned long pan_offset;};struct ps3fb_res_table {	u32 xres;	u32 yres;	u32 xoff;	u32 yoff;	u32 type;};#define PS3FB_RES_FULL 1static const struct ps3fb_res_table ps3fb_res[] = {	/* res_x,y   margin_x,y  full */	{  720,  480,  72,  48 , 0},	{  720,  576,  72,  58 , 0},	{ 1280,  720,  78,  38 , 0},	{ 1920, 1080, 116,  58 , 0},	/* full mode */	{  720,  480,   0,   0 , PS3FB_RES_FULL},	{  720,  576,   0,   0 , PS3FB_RES_FULL},	{ 1280,  720,   0,   0 , PS3FB_RES_FULL},	{ 1920, 1080,   0,   0 , PS3FB_RES_FULL},	/* vesa: normally full mode */	{ 1280,  768,   0,   0 , 0},	{ 1280, 1024,   0,   0 , 0},	{ 1920, 1200,   0,   0 , 0},	{    0,    0,   0,   0 , 0} };/* default resolution */#define GPU_RES_INDEX	0		/* 720 x 480 */static const struct fb_videomode ps3fb_modedb[] = {    /* 60 Hz broadcast modes (modes "1" to "5") */    {        /* 480i */        "480i", 60, 576, 384, 74074, 130, 89, 78, 57, 63, 6,        FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    },    {        /* 480p */        "480p", 60, 576, 384, 37037, 130, 89, 78, 57, 63, 6,        FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    },    {        /* 720p */        "720p", 60, 1124, 644, 13481, 298, 148, 57, 44, 80, 5,        FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    },    {        /* 1080i */        "1080i", 60, 1688, 964, 13481, 264, 160, 94, 62, 88, 5,        FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    },    {        /* 1080p */        "1080p", 60, 1688, 964, 6741, 264, 160, 94, 62, 88, 5,        FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    },    /* 50 Hz broadcast modes (modes "6" to "10") */    {        /* 576i */        "576i", 50, 576, 460, 74074, 142, 83, 97, 63, 63, 5,        FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    },    {        /* 576p */        "576p", 50, 576, 460, 37037, 142, 83, 97, 63, 63, 5,        FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    },    {        /* 720p */        "720p", 50, 1124, 644, 13468, 298, 478, 57, 44, 80, 5,        FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    },    {        /* 1080 */        "1080i", 50, 1688, 964, 13468, 264, 600, 94, 62, 88, 5,        FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    },    {        /* 1080p */        "1080p", 50, 1688, 964, 6734, 264, 600, 94, 62, 88, 5,        FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    },    /* VESA modes (modes "11" to "13") */    {	/* WXGA */	"wxga", 60, 1280, 768, 12924, 160, 24, 29, 3, 136, 6,	0, FB_VMODE_NONINTERLACED,	FB_MODE_IS_VESA    }, {	/* SXGA */	"sxga", 60, 1280, 1024, 9259, 248, 48, 38, 1, 112, 3,	FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED,	FB_MODE_IS_VESA    }, {	/* WUXGA */	"wuxga", 60, 1920, 1200, 6494, 80, 48, 26, 3, 32, 6,	FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED,	FB_MODE_IS_VESA    },    /* 60 Hz broadcast modes (full resolution versions of modes "1" to "5") */    {	/* 480if */	"480if", 60, 720, 480, 74074, 58, 17, 30, 9, 63, 6,	FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    }, {	/* 480pf */	"480pf", 60, 720, 480, 37037, 58, 17, 30, 9, 63, 6,	FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    }, {	/* 720pf */	"720pf", 60, 1280, 720, 13481, 220, 70, 19, 6, 80, 5,	FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    }, {	/* 1080if */	"1080if", 60, 1920, 1080, 13481, 148, 44, 36, 4, 88, 5,	FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    }, {	/* 1080pf */	"1080pf", 60, 1920, 1080, 6741, 148, 44, 36, 4, 88, 5,	FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    },    /* 50 Hz broadcast modes (full resolution versions of modes "6" to "10") */    {	/* 576if */	"576if", 50, 720, 576, 74074, 70, 11, 39, 5, 63, 5,	FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    }, {	/* 576pf */	"576pf", 50, 720, 576, 37037, 70, 11, 39, 5, 63, 5,	FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    }, {	/* 720pf */	"720pf", 50, 1280, 720, 13468, 220, 400, 19, 6, 80, 5,	FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    }, {	/* 1080if */	"1080f", 50, 1920, 1080, 13468, 148, 484, 36, 4, 88, 5,	FB_SYNC_BROADCAST, FB_VMODE_INTERLACED    }, {	/* 1080pf */	"1080pf", 50, 1920, 1080, 6734, 148, 484, 36, 4, 88, 5,	FB_SYNC_BROADCAST, FB_VMODE_NONINTERLACED    }};#define HEAD_A#define HEAD_B#define X_OFF(i)	(ps3fb_res[i].xoff)	/* left/right margin (pixel) */#define Y_OFF(i)	(ps3fb_res[i].yoff)	/* top/bottom margin (pixel) */#define WIDTH(i)	(ps3fb_res[i].xres)	/* width of FB */#define HEIGHT(i)	(ps3fb_res[i].yres)	/* height of FB */#define BPP		4			/* number of bytes per pixel *//* Start of the virtual frame buffer (relative to fullscreen ) */#define VP_OFF(i)	((WIDTH(i) * Y_OFF(i) + X_OFF(i)) * BPP)static int ps3fb_mode;module_param(ps3fb_mode, int, 0);static char *mode_option __devinitdata;static int ps3fb_get_res_table(u32 xres, u32 yres, int mode){	int full_mode;	unsigned int i;	u32 x, y, f;	full_mode = (mode & PS3FB_FULL_MODE_BIT) ? PS3FB_RES_FULL : 0;	for (i = 0;; i++) {		x = ps3fb_res[i].xres;		y = ps3fb_res[i].yres;		f = ps3fb_res[i].type;		if (!x) {			pr_debug("ERROR: ps3fb_get_res_table()\n");			return -1;		}		if (full_mode == PS3FB_RES_FULL && f != PS3FB_RES_FULL)			continue;		if (x == xres && (yres == 0 || y == yres))			break;		x = x - 2 * ps3fb_res[i].xoff;		y = y - 2 * ps3fb_res[i].yoff;		if (x == xres && (yres == 0 || y == yres))			break;	}	return i;}static unsigned int ps3fb_find_mode(const struct fb_var_screeninfo *var,				    u32 *ddr_line_length, u32 *xdr_line_length){	unsigned int i, mode;	for (i = 0; i < ARRAY_SIZE(ps3fb_modedb); i++)		if (var->xres == ps3fb_modedb[i].xres &&		    var->yres == ps3fb_modedb[i].yres &&		    var->pixclock == ps3fb_modedb[i].pixclock &&		    var->hsync_len == ps3fb_modedb[i].hsync_len &&		    var->vsync_len == ps3fb_modedb[i].vsync_len &&		    var->left_margin == ps3fb_modedb[i].left_margin &&		    var->right_margin == ps3fb_modedb[i].right_margin &&		    var->upper_margin == ps3fb_modedb[i].upper_margin &&		    var->lower_margin == ps3fb_modedb[i].lower_margin &&		    var->sync == ps3fb_modedb[i].sync &&		    (var->vmode & FB_VMODE_MASK) == ps3fb_modedb[i].vmode)			goto found;	pr_debug("ps3fb_find_mode: mode not found\n");	return 0;found:	/* Cropped broadcast modes use the full line length */	*ddr_line_length = ps3fb_modedb[i < 10 ? i + 13 : i].xres * BPP;	if (ps3_compare_firmware_version(1, 9, 0) >= 0) {		*xdr_line_length = GPU_ALIGN_UP(max(var->xres,						    var->xres_virtual) * BPP);		if (*xdr_line_length > GPU_MAX_LINE_LENGTH)			*xdr_line_length = GPU_MAX_LINE_LENGTH;	} else		*xdr_line_length = *ddr_line_length;	/* Full broadcast modes have the full mode bit set */	mode = i > 12 ? (i - 12) | PS3FB_FULL_MODE_BIT : i + 1;	pr_debug("ps3fb_find_mode: mode %u\n", mode);	return mode;}static const struct fb_videomode *ps3fb_default_mode(int id){	u32 mode = id & PS3AV_MODE_MASK;	u32 flags;	if (mode < 1 || mode > 13)		return NULL;	flags = id & ~PS3AV_MODE_MASK;	if (mode <= 10 && flags & PS3FB_FULL_MODE_BIT) {		/* Full broadcast mode */		return &ps3fb_modedb[mode + 12];	}	return &ps3fb_modedb[mode - 1];}static void ps3fb_sync_image(struct device *dev, u64 frame_offset,			     u64 dst_offset, u64 src_offset, u32 width,			     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;	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);	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 i, error = 0;	u32 ddr_line_length, xdr_line_length;	u64 ddr_base, xdr_base;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲最大色网站| 人人超碰91尤物精品国产| www.一区二区| 亚洲成人免费在线观看| 久久久久久久国产精品影院| 日本韩国视频一区二区| 欧美大片拔萝卜| 国产91丝袜在线18| 天天色综合天天| 国产欧美一二三区| 色天使色偷偷av一区二区| 成人黄色网址在线观看| 日韩av在线发布| 国产精品久久午夜夜伦鲁鲁| 欧美成人三级电影在线| 成人av电影在线网| 99精品欧美一区二区三区小说| 久久精品国产免费| 日韩精品一区第一页| 国产精品成人一区二区艾草| 久久久国产精品不卡| 日韩一级片网址| 欧美老女人第四色| 在线亚洲一区二区| 欧美在线不卡视频| 欧美在线三级电影| 欧美在线999| 在线这里只有精品| 欧美这里有精品| 在线观看日产精品| 在线免费精品视频| 欧美一区二区三区的| 91精品国产综合久久久久久久| 日本精品视频一区二区| 97精品国产露脸对白| 99精品视频在线免费观看| 日本道精品一区二区三区 | 日韩二区三区在线观看| 国产精品视频你懂的| 国产欧美日韩精品一区| 久久久久久久久久久久久女国产乱| 欧美一区二区三区白人| 久久精品在这里| 国产农村妇女毛片精品久久麻豆| 久久亚洲精品国产精品紫薇| 久久婷婷一区二区三区| 制服丝袜在线91| 在线欧美日韩精品| 日韩一区二区在线观看视频播放| 欧美一级欧美三级| 国产亚洲欧美日韩日本| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲日本护士毛茸茸| 亚洲午夜久久久久中文字幕久| 亚洲色图制服诱惑| 国产精品一卡二| 99视频有精品| 欧美日韩视频在线一区二区| 日韩一区二区三区在线| 欧美激情一区二区在线| 亚洲乱码国产乱码精品精小说| 亚洲成人av福利| 国内外成人在线视频| 亚洲精品午夜久久久| 蜜臀国产一区二区三区在线播放| 国产成人精品aa毛片| 一本大道综合伊人精品热热| 国产精品高潮久久久久无| 一个色综合网站| 久久国产麻豆精品| 91麻豆国产福利精品| 亚洲一区在线播放| 国产欧美精品区一区二区三区| 中文字幕一区二区三区乱码在线 | 精品久久人人做人人爱| 国产精品久久看| 麻豆国产精品视频| 欧美在线不卡一区| 日韩一区二区免费在线电影| 国产精品视频一二三| 亚洲精品一区在线观看| 国产高清无密码一区二区三区| 日韩电影一区二区三区| 在线观看一区二区视频| 亚洲精品一线二线三线无人区| 一本大道av伊人久久综合| 精品免费日韩av| 亚洲天堂免费看| 国产精品夜夜嗨| 欧美一区二区三区在| 综合欧美一区二区三区| 国产美女在线精品| 欧美一区二区三区免费观看视频| 亚洲日韩欧美一区二区在线| 日本午夜一本久久久综合| 一区二区三区av电影| 精品一区二区三区欧美| 91精品国产品国语在线不卡| 亚洲激情六月丁香| 91丨porny丨户外露出| 欧美午夜片在线看| 精品乱人伦小说| 欧美精品第1页| 亚洲一区二区精品久久av| 成人国产在线观看| 国产亚洲一区字幕| 蜜桃av一区二区| 欧美精品电影在线播放| 最新久久zyz资源站| 三级欧美在线一区| 91 com成人网| 偷窥国产亚洲免费视频| 色av一区二区| 亚洲激情男女视频| 久久夜色精品国产噜噜av| 日韩精品91亚洲二区在线观看| 99精品视频一区| 亚洲国产精品影院| 欧美浪妇xxxx高跟鞋交| 美国精品在线观看| 欧美成人高清电影在线| 亚洲成人激情社区| 欧美精品视频www在线观看| 亚洲成人高清在线| 日韩视频免费直播| 国产一区二区三区在线观看免费视频 | 精品国产一区二区三区四区四| 国产精品久久毛片av大全日韩| 亚洲免费av网站| 色欧美片视频在线观看| 午夜视频在线观看一区二区 | 日韩午夜激情视频| 国产一区二区三区美女| 亚洲欧美偷拍三级| 日韩一级成人av| 国产成人亚洲综合a∨婷婷| 综合色中文字幕| 日韩精品专区在线影院重磅| 国产最新精品免费| 色婷婷av一区二区三区gif| 国产日韩影视精品| 日本高清无吗v一区| 蜜桃av一区二区在线观看| 国产免费成人在线视频| 国产精品影音先锋| 久久精品国产免费| 亚洲精品久久久久久国产精华液| 欧美电影免费观看完整版| 精品一区二区三区在线观看 | 色丁香久综合在线久综合在线观看| 国产福利91精品一区二区三区| 国产最新精品免费| 国产乱子伦视频一区二区三区| 韩国一区二区视频| 国产伦精品一区二区三区视频青涩 | 亚洲三级电影全部在线观看高清| 国产精品视频一二| 国产精品成人一区二区艾草 | 国产精品日韩成人| 中文在线免费一区三区高中清不卡| 欧美电影免费观看高清完整版在线| 欧美无砖砖区免费| 7777女厕盗摄久久久| 日韩精品中文字幕一区| 久久亚洲一级片| 国产精品久久久久久久久果冻传媒| 国产精品视频线看| 亚洲一区中文日韩| 青青草精品视频| 狠狠色狠狠色综合| 成人免费精品视频| 欧美在线不卡一区| 欧美区一区二区三区| 精品日本一线二线三线不卡| 久久在线免费观看| 亚洲色大成网站www久久九九| 一区二区三区四区av| 日本人妖一区二区| 国产精品一区二区果冻传媒| 99精品在线免费| 欧美日韩国产首页在线观看| 日韩欧美你懂的| 亚洲欧美综合另类在线卡通| 亚洲午夜精品17c| 精品一区二区免费| 色综合久久久久综合体桃花网| 欧美精品vⅰdeose4hd| 久久精品一区二区三区四区| 一区二区在线电影| 久久黄色级2电影| av在线不卡网| 日韩欧美区一区二| 亚洲人成亚洲人成在线观看图片| 午夜a成v人精品| 国产99久久久国产精品免费看| 欧美日韩中文精品| 欧美国产乱子伦| 蜜臀91精品一区二区三区| jlzzjlzz欧美大全| 精品国产成人在线影院 |