亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日本伊人午夜精品| av网站免费线看精品| 激情综合色丁香一区二区| 狠狠色丁香久久婷婷综合_中| 成人美女视频在线看| 日韩一区二区在线播放| 国产精品久久久一区麻豆最新章节| 亚洲一区二区三区中文字幕| 国产高清精品网站| 欧美一区二区三区免费观看视频| 亚洲日本一区二区三区| 国产一区在线不卡| 欧美一区二区三区电影| 亚洲亚洲精品在线观看| av在线不卡电影| 久久精品夜夜夜夜久久| 狂野欧美性猛交blacked| 欧美日产国产精品| 亚洲精品视频自拍| 成人h动漫精品| 欧美激情在线看| 懂色中文一区二区在线播放| 国产日韩欧美精品在线| 人人狠狠综合久久亚洲| 91精品国产麻豆国产自产在线| 亚洲图片欧美色图| 一本大道久久a久久综合婷婷| 国产精品美女久久久久久久久| 国产精品一品二品| 久久久噜噜噜久久中文字幕色伊伊| 麻豆成人免费电影| 日韩午夜激情免费电影| 蜜桃视频一区二区三区| 日韩欧美成人午夜| 狠狠色狠狠色综合系列| 精品噜噜噜噜久久久久久久久试看| 蜜臀av性久久久久蜜臀aⅴ流畅| 7799精品视频| 美女视频一区在线观看| 日韩免费看网站| 毛片av一区二区三区| 精品美女一区二区三区| 国产一区在线视频| 国产精品天天看| 色婷婷精品大在线视频| 亚洲国产另类精品专区| 777亚洲妇女| 国产一区二区三区综合| 国产精品乱码妇女bbbb| 91丨porny丨国产| 亚洲成人激情自拍| 欧美大白屁股肥臀xxxxxx| 九九**精品视频免费播放| 国产日韩av一区| 99久久精品国产一区| 亚洲伦在线观看| 欧美日韩在线免费视频| 另类小说图片综合网| 久久久久久久久久久99999| 国产成人免费视频网站| 国产精品麻豆99久久久久久| 欧美午夜电影网| 久久99国产精品尤物| 国产精品久久久久久久久动漫| 91国内精品野花午夜精品| 日本午夜一本久久久综合| 欧美激情一区二区三区不卡| 欧美三级日本三级少妇99| 久久99精品视频| 亚洲免费在线观看视频| 日韩一区二区电影网| 国产精品一区二区黑丝| 亚洲午夜在线视频| 国产视频不卡一区| 欧美日韩第一区日日骚| 国产精品一品视频| 性欧美疯狂xxxxbbbb| 久久久久久99久久久精品网站| 色呦呦国产精品| 国内不卡的二区三区中文字幕| 国产视频视频一区| 99精品欧美一区二区三区综合在线| 三级成人在线视频| 国产精品嫩草影院av蜜臀| 欧美精品一二三四| 99视频在线观看一区三区| 日韩av一区二区在线影视| 亚洲女人****多毛耸耸8| 欧美成人精品福利| 欧美视频三区在线播放| 成人三级伦理片| 久久91精品国产91久久小草| 亚洲电影一区二区| 国产精品久久久久久久久免费樱桃 | 色视频一区二区| 国产老女人精品毛片久久| 天天综合天天综合色| 亚洲欧美另类小说| 中文字幕av资源一区| 精品国产麻豆免费人成网站| 欧美精选午夜久久久乱码6080| av亚洲精华国产精华| 国产99精品视频| 国产一区二区视频在线| 精品影院一区二区久久久| 午夜免费欧美电影| 亚洲国产一二三| 亚洲制服丝袜av| 亚洲人成网站在线| 最新成人av在线| 国产精品久久久久久久久晋中| 欧美激情一区二区三区四区| 国产区在线观看成人精品| 精品电影一区二区| 26uuu亚洲| 国产欧美日韩在线视频| 亚洲国产激情av| 国产精品久久久爽爽爽麻豆色哟哟| 国产日本欧美一区二区| 久久久国产午夜精品| 国产欧美日韩亚州综合| 欧美国产综合色视频| 国产精品久久久久久久久免费樱桃 | 亚洲影视在线观看| 亚洲国产视频直播| 日本伊人午夜精品| 国产呦精品一区二区三区网站| 国精产品一区一区三区mba桃花| 国产毛片精品一区| 成人爱爱电影网址| 欧美最猛黑人xxxxx猛交| 欧美日韩成人一区| 久久免费看少妇高潮| 欧美激情一区二区三区不卡| 亚洲精品国产视频| 日韩精品亚洲专区| 国产河南妇女毛片精品久久久| 处破女av一区二区| 欧美中文字幕不卡| 欧美丰满嫩嫩电影| 久久这里只有精品视频网| 亚洲国产精品激情在线观看| 一区二区三区中文字幕精品精品 | 久久99最新地址| 成人午夜视频网站| 欧美日韩亚洲综合一区二区三区| 日韩一区二区在线看| 国产精品每日更新在线播放网址| 亚洲制服欧美中文字幕中文字幕| 久久国产福利国产秒拍| 99国产精品久久久久久久久久久| 欧美性猛交xxxx黑人交| 欧美精品一区二区三区久久久| 国产精品毛片久久久久久| 日韩综合小视频| 成人在线视频一区二区| 欧美人牲a欧美精品| 中文字幕二三区不卡| 亚洲成人免费视| av一区二区三区四区| 欧美一区二区福利视频| 亚洲人成伊人成综合网小说| 国产美女娇喘av呻吟久久| 欧美视频日韩视频在线观看| 中文文精品字幕一区二区| 视频在线观看国产精品| 99久久精品免费精品国产| 欧美一级高清大全免费观看| 亚洲人成精品久久久久| 国产米奇在线777精品观看| 欧美精品xxxxbbbb| 亚洲欧美一区二区三区极速播放| 国内精品国产成人| 欧美日韩国产高清一区二区三区 | 中文字幕av不卡| 久久国内精品视频| 欧美三级日本三级少妇99| 中文字幕亚洲精品在线观看| 国产精品综合视频| 欧美一区二区福利在线| 午夜精品久久久久久久久| 日本精品一区二区三区四区的功能| 欧美激情艳妇裸体舞| 国产在线播放一区二区三区| 日韩一级大片在线观看| 亚洲午夜久久久久中文字幕久| 99久久久无码国产精品| 国产日韩av一区二区| 国产夫妻精品视频| 精品久久久网站| 另类小说图片综合网| 欧美成人精品福利| 九九热在线视频观看这里只有精品| 在线不卡a资源高清| 亚洲一区二区欧美日韩| 欧洲精品一区二区| 亚洲www啪成人一区二区麻豆| 欧美网站大全在线观看| 亚洲图片一区二区| 欧美一级专区免费大片|