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

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

?? ps3fb.c

?? linux 內(nèi)核源代碼
?? 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一区二区三区免费野_久草精品视频
亚洲电影一级片| 国产精品福利一区二区三区| 亚洲香肠在线观看| 欧美日韩精品免费| 日本欧美肥老太交大片| 久久亚洲影视婷婷| 成人黄色片在线观看| 1000精品久久久久久久久| 91福利在线观看| 视频一区在线播放| www日韩大片| 91麻豆免费观看| 三级成人在线视频| 26uuu国产日韩综合| 99久久国产综合精品色伊| 亚洲国产成人91porn| 欧美成人精精品一区二区频| 成人免费视频一区| 午夜精品久久一牛影视| www国产成人免费观看视频 深夜成人网| 成人免费福利片| 亚洲第一久久影院| 中文一区在线播放| 欧美日韩成人一区二区| 国产精品一线二线三线精华| 亚洲欧美日韩人成在线播放| 91精品一区二区三区在线观看| 懂色一区二区三区免费观看| 亚洲精品免费在线| 欧美精品一区男女天堂| 一本大道久久a久久综合| 精品一区二区三区在线观看| 伊人夜夜躁av伊人久久| 精品免费视频一区二区| 91久久精品一区二区| 国产在线不卡一区| 亚洲一本大道在线| 欧美激情综合在线| 日韩视频一区二区三区| 色综合网站在线| 国产成人亚洲综合a∨婷婷图片| 天天综合色天天| 亚洲老司机在线| 久久久99精品免费观看不卡| 欧美三级电影一区| 99精品久久只有精品| 久久精品72免费观看| 亚洲与欧洲av电影| 亚洲欧洲精品一区二区精品久久久| 日韩一区二区三区电影在线观看| 色94色欧美sute亚洲13| 国产91综合一区在线观看| 日本亚洲三级在线| 亚洲国产日韩a在线播放性色| 国产精品乱人伦| 国产亚洲精品aa| 久久综合av免费| 日韩精品一区二区三区在线观看| 欧美日精品一区视频| 色欧美日韩亚洲| 日本久久电影网| 91无套直看片红桃| jlzzjlzz亚洲女人18| 国产suv一区二区三区88区| 久久精品72免费观看| 蜜桃免费网站一区二区三区| 日韩激情一区二区| 日韩一区精品字幕| 婷婷综合五月天| 日韩精品福利网| 日韩电影免费在线| 青青草成人在线观看| 日韩激情在线观看| 欧美aⅴ一区二区三区视频| 视频一区欧美日韩| 日本一区中文字幕| 久草在线在线精品观看| 精品一区二区av| 国产麻豆9l精品三级站| 国产成人啪午夜精品网站男同| 福利一区二区在线| 99热国产精品| 在线视频国产一区| 欧美区一区二区三区| 欧美老人xxxx18| 日韩欧美色综合| 久久久久亚洲综合| 国产精品福利电影一区二区三区四区| 国产精品嫩草99a| 17c精品麻豆一区二区免费| 一区二区视频在线看| 亚洲国产美国国产综合一区二区| 天天影视涩香欲综合网| 97se亚洲国产综合在线| 91丨porny丨最新| 欧美日韩亚洲综合在线| 日韩三级av在线播放| 久久亚洲一区二区三区四区| 中文字幕一区二区三区不卡在线 | 免费在线看成人av| 精品一区二区三区的国产在线播放| 国产乱码精品一区二区三区忘忧草| 国产福利一区二区三区视频| 色综合一个色综合| 日韩片之四级片| 国产精品少妇自拍| 午夜精品一区二区三区免费视频 | 91免费在线播放| 欧美日韩精品久久久| 2017欧美狠狠色| 亚洲欧美电影一区二区| 婷婷激情综合网| 国产成人免费视频一区| 欧美在线影院一区二区| 欧美v国产在线一区二区三区| 综合激情成人伊人| 人人爽香蕉精品| 91色视频在线| 久久久久久毛片| 亚洲第一狼人社区| 99久久久精品| 精品久久久久av影院| 综合av第一页| 国内精品国产三级国产a久久| 91视频观看免费| 精品盗摄一区二区三区| 一区二区三区日韩欧美精品| 韩日欧美一区二区三区| 欧美午夜在线一二页| 欧美国产日韩在线观看| 麻豆精品久久精品色综合| 色噜噜偷拍精品综合在线| 欧美精品一区二区三区蜜桃视频| 亚洲一区二区三区国产| 成人动漫精品一区二区| 欧美mv日韩mv亚洲| 午夜精品一区二区三区免费视频| av不卡一区二区三区| ww亚洲ww在线观看国产| 免费观看在线色综合| 91国偷自产一区二区开放时间| 国产网红主播福利一区二区| 日韩黄色一级片| 在线观看欧美黄色| 亚洲视频一二区| 丁香婷婷综合网| 久久久亚洲高清| 久久99在线观看| 9191成人精品久久| 午夜欧美视频在线观看| 色婷婷久久99综合精品jk白丝 | 色婷婷精品久久二区二区蜜臂av| 久久亚洲春色中文字幕久久久| 亚洲成人免费电影| 欧美性淫爽ww久久久久无| 亚洲女同ⅹxx女同tv| www.亚洲免费av| 17c精品麻豆一区二区免费| 成人黄色免费短视频| 欧美韩国日本一区| 成人性生交大片免费看视频在线 | 精品一区二区av| 精品国产一区二区三区不卡 | 亚洲成人综合网站| 欧美日韩午夜在线视频| 亚洲国产一区视频| 欧美人xxxx| 裸体在线国模精品偷拍| 91精品福利在线一区二区三区 | 天堂资源在线中文精品| 欧美三级三级三级爽爽爽| 亚洲国产精品影院| 91精品国产黑色紧身裤美女| 免费观看久久久4p| 久久色在线视频| www.欧美色图| 亚洲一区在线视频| 欧美一区午夜视频在线观看| 麻豆91在线看| 久久精品人人做人人爽97| 成人综合婷婷国产精品久久蜜臀 | jlzzjlzz欧美大全| 一区二区三区高清| 在线不卡中文字幕播放| 久久国产成人午夜av影院| 久久女同性恋中文字幕| www.在线成人| 日韩成人午夜电影| 精品黑人一区二区三区久久| 国产99久久久国产精品潘金| 1024亚洲合集| 91精品国产综合久久精品| 国产综合色产在线精品| 日韩毛片在线免费观看| 欧美日精品一区视频| 国产一本一道久久香蕉| 一区二区不卡在线播放| 日韩美一区二区三区| 成人午夜av在线| 日韩国产在线观看一区|