亚洲欧美第一页_禁久久精品乱码_粉嫩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 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;	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;	unsigned int num_frames;	/* num of frame buffers */	unsigned int width;	unsigned int height;	unsigned int ddr_line_length;	unsigned int ddr_frame_size;	unsigned int xdr_frame_size;	unsigned int full_offset;	/* start of fullscreen DDR fb */	unsigned int fb_offset;		/* start of actual DDR fb */	unsigned int pan_offset;};#define FIRST_NATIVE_MODE_INDEX	10static 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    },    {        /* 1080i */        "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    },    [FIRST_NATIVE_MODE_INDEX] =    /* 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 */	"1080if", 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    },    /* 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    }};#define HEAD_A#define HEAD_B#define BPP		4			/* number of bytes per pixel */static int ps3fb_mode;module_param(ps3fb_mode, int, 0);static char *mode_option __devinitdata;static int ps3fb_cmp_mode(const struct fb_videomode *vmode,			  const struct fb_var_screeninfo *var){	long xres, yres, left_margin, right_margin, upper_margin, lower_margin;	long dx, dy;	/* maximum values */	if (var->xres > vmode->xres || var->yres > vmode->yres ||	    var->pixclock > vmode->pixclock ||	    var->hsync_len > vmode->hsync_len ||	    var->vsync_len > vmode->vsync_len)		return -1;	/* progressive/interlaced must match */	if ((var->vmode & FB_VMODE_MASK) != vmode->vmode)		return -1;	/* minimum resolution */	xres = max(var->xres, 1U);	yres = max(var->yres, 1U);	/* minimum margins */	left_margin = max(var->left_margin, vmode->left_margin);	right_margin = max(var->right_margin, vmode->right_margin);	upper_margin = max(var->upper_margin, vmode->upper_margin);	lower_margin = max(var->lower_margin, vmode->lower_margin);	/* resolution + margins may not exceed native parameters */	dx = ((long)vmode->left_margin + (long)vmode->xres +	      (long)vmode->right_margin) -	     (left_margin + xres + right_margin);	if (dx < 0)		return -1;	dy = ((long)vmode->upper_margin + (long)vmode->yres +	      (long)vmode->lower_margin) -	     (upper_margin + yres + lower_margin);	if (dy < 0)		return -1;	/* exact match */	if (!dx && !dy)		return 0;	/* resolution difference */	return (vmode->xres - xres) * (vmode->yres - yres);}static const struct fb_videomode *ps3fb_native_vmode(enum ps3av_mode_num id){	return &ps3fb_modedb[FIRST_NATIVE_MODE_INDEX + id - 1];}static const struct fb_videomode *ps3fb_vmode(int id){	u32 mode = id & PS3AV_MODE_MASK;	if (mode < PS3AV_MODE_480I || mode > PS3AV_MODE_WUXGA)		return NULL;	if (mode <= PS3AV_MODE_1080P50 && !(id & PS3AV_MODE_FULL)) {		/* Non-fullscreen broadcast mode */		return &ps3fb_modedb[mode - 1];	}	return ps3fb_native_vmode(mode);}static unsigned int ps3fb_find_mode(struct fb_var_screeninfo *var,				    u32 *ddr_line_length, u32 *xdr_line_length){	unsigned int id, best_id;	int diff, best_diff;	const struct fb_videomode *vmode;	long gap;	best_id = 0;	best_diff = INT_MAX;	pr_debug("%s: wanted %u [%u] %u x %u [%u] %u\n", __func__,		 var->left_margin, var->xres, var->right_margin,		 var->upper_margin, var->yres, var->lower_margin);	for (id = PS3AV_MODE_480I; id <= PS3AV_MODE_WUXGA; id++) {		vmode = ps3fb_native_vmode(id);		diff = ps3fb_cmp_mode(vmode, var);		pr_debug("%s: mode %u: %u [%u] %u x %u [%u] %u: diff = %d\n",			 __func__, id, vmode->left_margin, vmode->xres,			 vmode->right_margin, vmode->upper_margin,			 vmode->yres, vmode->lower_margin, diff);		if (diff < 0)			continue;		if (diff < best_diff) {			best_id = id;			if (!diff)				break;			best_diff = diff;		}	}	if (!best_id) {		pr_debug("%s: no suitable mode found\n", __func__);		return 0;	}	id = best_id;	vmode = ps3fb_native_vmode(id);	*ddr_line_length = vmode->xres * BPP;	/* minimum resolution */	if (!var->xres)		var->xres = 1;	if (!var->yres)		var->yres = 1;	/* minimum virtual resolution */	if (var->xres_virtual < var->xres)		var->xres_virtual = var->xres;	if (var->yres_virtual < var->yres)		var->yres_virtual = var->yres;	/* minimum margins */	if (var->left_margin < vmode->left_margin)		var->left_margin = vmode->left_margin;	if (var->right_margin < vmode->right_margin)		var->right_margin = vmode->right_margin;	if (var->upper_margin < vmode->upper_margin)		var->upper_margin = vmode->upper_margin;	if (var->lower_margin < vmode->lower_margin)		var->lower_margin = vmode->lower_margin;	/* extra margins */	gap = ((long)vmode->left_margin + (long)vmode->xres +	       (long)vmode->right_margin) -	      ((long)var->left_margin + (long)var->xres +	       (long)var->right_margin);	if (gap > 0) {		var->left_margin += gap/2;		var->right_margin += (gap+1)/2;		pr_debug("%s: rounded up H to %u [%u] %u\n", __func__,			 var->left_margin, var->xres, var->right_margin);	}	gap = ((long)vmode->upper_margin + (long)vmode->yres +	       (long)vmode->lower_margin) -	      ((long)var->upper_margin + (long)var->yres +	       (long)var->lower_margin);	if (gap > 0) {		var->upper_margin += gap/2;		var->lower_margin += (gap+1)/2;		pr_debug("%s: rounded up V to %u [%u] %u\n", __func__,			 var->upper_margin, var->yres, var->lower_margin);	}	/* fixed fields */	var->pixclock = vmode->pixclock;	var->hsync_len = vmode->hsync_len;	var->vsync_len = vmode->vsync_len;	var->sync = vmode->sync;	if (ps3_compare_firmware_version(1, 9, 0) >= 0) {		*xdr_line_length = GPU_ALIGN_UP(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;	if (vmode->sync & FB_SYNC_BROADCAST) {		/* Full broadcast modes have the full mode bit set */		if (vmode->xres == var->xres && vmode->yres == var->yres)			id |= PS3AV_MODE_FULL;	}	pr_debug("%s: mode %u\n", __func__, id);	return id;}static void ps3fb_sync_image(struct device *dev, u64 frame_offset,			     u64 dst_offset, u64 src_offset, u32 width,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品卡一卡二卡三卡四在线| 成人中文字幕合集| 国产精品国产精品国产专区不片| 97国产一区二区| 另类小说图片综合网| 国产精品久久久久影视| 3atv在线一区二区三区| 成人国产电影网| 美国三级日本三级久久99| 亚洲欧洲精品一区二区三区不卡| 日韩一区二区在线观看| 91丨九色丨国产丨porny| www.欧美色图| 日韩精品亚洲一区二区三区免费| 久久综合久色欧美综合狠狠| 欧美日韩一二三区| 色综合久久久久久久久久久| 国产成人鲁色资源国产91色综 | 经典一区二区三区| 亚洲国产精品精华液网站| 欧美一级片免费看| 成人一二三区视频| 国产精品1区2区| 久久99精品国产.久久久久久| 亚洲高清免费在线| 亚洲国产va精品久久久不卡综合| 亚洲欧洲日产国产综合网| 国产农村妇女毛片精品久久麻豆| 精品久久一二三区| 精品国产一区久久| 精品国产91亚洲一区二区三区婷婷 | 黄色日韩网站视频| 国产成人精品亚洲日本在线桃色| 精品无人码麻豆乱码1区2区 | 日韩三级视频在线看| 制服丝袜一区二区三区| 精品国产欧美一区二区| 久久精品视频在线看| 国产精品你懂的在线| 亚洲乱码国产乱码精品精小说| 18涩涩午夜精品.www| 亚洲精品国产高清久久伦理二区| 一区二区三区中文字幕在线观看| 亚洲成人免费在线观看| 麻豆高清免费国产一区| 成人午夜短视频| 欧美三级电影精品| 国产三级欧美三级日产三级99| 亚洲色图欧洲色图婷婷| 日韩av二区在线播放| 奇米亚洲午夜久久精品| 亚洲一卡二卡三卡四卡| 精品一区二区三区不卡| 99久久婷婷国产| 精品粉嫩超白一线天av| 自拍偷拍亚洲激情| 精品一区二区三区久久| 欧美日韩精品一区二区三区四区 | 精品国产sm最大网站免费看| 亚洲欧洲中文日韩久久av乱码| 免费成人深夜小野草| 在线亚洲一区二区| 国产精品三级视频| 激情五月播播久久久精品| 欧美日韩一区三区| 国产精品人妖ts系列视频| 捆绑变态av一区二区三区| 色综合久久综合网| 国产精品免费av| 久久66热偷产精品| 日韩欧美一区二区在线视频| 亚洲国产综合91精品麻豆| 99国产精品国产精品久久| 国产日产亚洲精品系列| 国内精品国产三级国产a久久| 欧美视频日韩视频在线观看| 亚洲人成影院在线观看| 99热这里都是精品| 亚洲欧美日韩一区二区三区在线观看| 国产不卡在线一区| 国产精品麻豆99久久久久久| 懂色av中文字幕一区二区三区| 国产亚洲视频系列| 成人免费福利片| 国产拍揄自揄精品视频麻豆| 丝袜亚洲另类丝袜在线| 欧美一区二区视频网站| 久久精品国产精品青草| 欧美电影免费观看高清完整版 | 中文一区在线播放| 成人永久免费视频| 夜夜揉揉日日人人青青一国产精品| 日本韩国一区二区三区视频| 性做久久久久久免费观看欧美| 欧美日韩国产bt| 高清国产午夜精品久久久久久| 亚洲天堂精品视频| 欧美不卡一区二区三区| 成人午夜电影网站| 日韩电影在线一区二区三区| 欧美xxxxx裸体时装秀| gogogo免费视频观看亚洲一| 亚洲成人激情av| 国产精品久久久一本精品| 欧美日韩高清不卡| 成人免费精品视频| 奇米一区二区三区| 一区av在线播放| 国产调教视频一区| 欧美日韩www| 色综合久久88色综合天天6| 久久精工是国产品牌吗| 亚洲综合小说图片| 国产精品久久久久毛片软件| 日韩欧美成人午夜| 91黄视频在线| 91丨porny丨国产入口| 激情av综合网| 麻豆精品一二三| 亚洲成人777| 亚洲亚洲精品在线观看| 国产精品久久久久久户外露出 | 欧美一级黄色大片| 欧美日韩在线电影| 欧美揉bbbbb揉bbbbb| 欧美做爰猛烈大尺度电影无法无天| 国产91精品久久久久久久网曝门| 久久91精品国产91久久小草| 久久精品噜噜噜成人av农村| 青青草原综合久久大伊人精品优势 | 亚洲一区二区三区视频在线播放| 国产精品久久久久久亚洲毛片| 久久久精品免费免费| 国产欧美日韩在线视频| 国产精品素人一区二区| 国产精品乱码妇女bbbb| 中文字幕一区二区三区乱码在线| 国产精品网站在线观看| 亚洲欧美综合色| 亚洲美女在线国产| 日韩制服丝袜av| 国产精品一级片| www.66久久| 欧美日韩高清不卡| 久久综合精品国产一区二区三区| 国产精品视频一二| 国产成人精品www牛牛影视| 成人激情文学综合网| 欧美体内she精视频| 久久天天做天天爱综合色| 亚洲人成网站精品片在线观看| 亚洲在线观看免费| 久久丁香综合五月国产三级网站 | 在线免费观看成人短视频| 日韩精品一区在线| 亚洲欧美一区二区视频| 丝袜亚洲另类欧美| eeuss鲁片一区二区三区在线观看| 色94色欧美sute亚洲13| 精品成人一区二区三区| 亚洲精品日日夜夜| 风间由美一区二区av101| av激情亚洲男人天堂| 欧美精品一卡二卡| ...xxx性欧美| 国产精品一区久久久久| 欧美日韩成人激情| 综合av第一页| a4yy欧美一区二区三区| 久久久午夜精品| 国产一区欧美一区| 欧美va天堂va视频va在线| 亚洲电影视频在线| 色偷偷成人一区二区三区91| 中文字幕精品一区二区精品绿巨人 | 天堂一区二区在线| 欧美网站大全在线观看| 午夜精品福利一区二区三区蜜桃| 色菇凉天天综合网| 夜夜精品视频一区二区| 91传媒视频在线播放| 亚洲精品欧美综合四区| 91麻豆123| 婷婷久久综合九色国产成人| 欧美日韩不卡在线| 久久精品国产亚洲a| 久久综合丝袜日本网| 91极品美女在线| 日韩精品五月天| xf在线a精品一区二区视频网站| 精品一区二区影视| 亚洲国产精品传媒在线观看| 成人免费av资源| 亚洲成人av资源| 国产婷婷色一区二区三区四区 | 亚洲少妇屁股交4| 91视频在线观看免费| 亚洲成a人片在线观看中文| 9191精品国产综合久久久久久| 精品一区二区免费视频|