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

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

?? system-bus.c

?? linux 內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  PS3 system bus driver. * *  Copyright (C) 2006 Sony Computer Entertainment Inc. *  Copyright 2006 Sony Corp. * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; version 2 of the License. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#include <linux/dma-mapping.h>#include <linux/err.h>#include <asm/udbg.h>#include <asm/lv1call.h>#include <asm/firmware.h>#include "platform.h"static struct device ps3_system_bus = {	.bus_id = "ps3_system",};/* FIXME: need device usage counters! */struct {	struct mutex mutex;	int sb_11; /* usb 0 */	int sb_12; /* usb 0 */	int gpu;} static usage_hack;static int ps3_is_device(struct ps3_system_bus_device *dev,			 unsigned int bus_id, unsigned int dev_id){	return dev->bus_id == bus_id && dev->dev_id == dev_id;}static int ps3_open_hv_device_sb(struct ps3_system_bus_device *dev){	int result;	BUG_ON(!dev->bus_id);	mutex_lock(&usage_hack.mutex);	if (ps3_is_device(dev, 1, 1)) {		usage_hack.sb_11++;		if (usage_hack.sb_11 > 1) {			result = 0;			goto done;		}	}	if (ps3_is_device(dev, 1, 2)) {		usage_hack.sb_12++;		if (usage_hack.sb_12 > 1) {			result = 0;			goto done;		}	}	result = lv1_open_device(dev->bus_id, dev->dev_id, 0);	if (result) {		pr_debug("%s:%d: lv1_open_device failed: %s\n", __func__,			__LINE__, ps3_result(result));			result = -EPERM;	}done:	mutex_unlock(&usage_hack.mutex);	return result;}static int ps3_close_hv_device_sb(struct ps3_system_bus_device *dev){	int result;	BUG_ON(!dev->bus_id);	mutex_lock(&usage_hack.mutex);	if (ps3_is_device(dev, 1, 1)) {		usage_hack.sb_11--;		if (usage_hack.sb_11) {			result = 0;			goto done;		}	}	if (ps3_is_device(dev, 1, 2)) {		usage_hack.sb_12--;		if (usage_hack.sb_12) {			result = 0;			goto done;		}	}	result = lv1_close_device(dev->bus_id, dev->dev_id);	BUG_ON(result);done:	mutex_unlock(&usage_hack.mutex);	return result;}static int ps3_open_hv_device_gpu(struct ps3_system_bus_device *dev){	int result;	mutex_lock(&usage_hack.mutex);	usage_hack.gpu++;	if (usage_hack.gpu > 1) {		result = 0;		goto done;	}	result = lv1_gpu_open(0);	if (result) {		pr_debug("%s:%d: lv1_gpu_open failed: %s\n", __func__,			__LINE__, ps3_result(result));			result = -EPERM;	}done:	mutex_unlock(&usage_hack.mutex);	return result;}static int ps3_close_hv_device_gpu(struct ps3_system_bus_device *dev){	int result;	mutex_lock(&usage_hack.mutex);	usage_hack.gpu--;	if (usage_hack.gpu) {		result = 0;		goto done;	}	result = lv1_gpu_close();	BUG_ON(result);done:	mutex_unlock(&usage_hack.mutex);	return result;}int ps3_open_hv_device(struct ps3_system_bus_device *dev){	BUG_ON(!dev);	pr_debug("%s:%d: match_id: %u\n", __func__, __LINE__, dev->match_id);	switch (dev->match_id) {	case PS3_MATCH_ID_EHCI:	case PS3_MATCH_ID_OHCI:	case PS3_MATCH_ID_GELIC:	case PS3_MATCH_ID_STOR_DISK:	case PS3_MATCH_ID_STOR_ROM:	case PS3_MATCH_ID_STOR_FLASH:		return ps3_open_hv_device_sb(dev);	case PS3_MATCH_ID_SOUND:	case PS3_MATCH_ID_GRAPHICS:		return ps3_open_hv_device_gpu(dev);	case PS3_MATCH_ID_AV_SETTINGS:	case PS3_MATCH_ID_SYSTEM_MANAGER:		pr_debug("%s:%d: unsupported match_id: %u\n", __func__,			__LINE__, dev->match_id);		pr_debug("%s:%d: bus_id: %u\n", __func__,			__LINE__, dev->bus_id);		BUG();		return -EINVAL;	default:		break;	}	pr_debug("%s:%d: unknown match_id: %u\n", __func__, __LINE__,		dev->match_id);	BUG();	return -ENODEV;}EXPORT_SYMBOL_GPL(ps3_open_hv_device);int ps3_close_hv_device(struct ps3_system_bus_device *dev){	BUG_ON(!dev);	pr_debug("%s:%d: match_id: %u\n", __func__, __LINE__, dev->match_id);	switch (dev->match_id) {	case PS3_MATCH_ID_EHCI:	case PS3_MATCH_ID_OHCI:	case PS3_MATCH_ID_GELIC:	case PS3_MATCH_ID_STOR_DISK:	case PS3_MATCH_ID_STOR_ROM:	case PS3_MATCH_ID_STOR_FLASH:		return ps3_close_hv_device_sb(dev);	case PS3_MATCH_ID_SOUND:	case PS3_MATCH_ID_GRAPHICS:		return ps3_close_hv_device_gpu(dev);	case PS3_MATCH_ID_AV_SETTINGS:	case PS3_MATCH_ID_SYSTEM_MANAGER:		pr_debug("%s:%d: unsupported match_id: %u\n", __func__,			__LINE__, dev->match_id);		pr_debug("%s:%d: bus_id: %u\n", __func__,			__LINE__, dev->bus_id);		BUG();		return -EINVAL;	default:		break;	}	pr_debug("%s:%d: unknown match_id: %u\n", __func__, __LINE__,		dev->match_id);	BUG();	return -ENODEV;}EXPORT_SYMBOL_GPL(ps3_close_hv_device);#define dump_mmio_region(_a) _dump_mmio_region(_a, __func__, __LINE__)static void _dump_mmio_region(const struct ps3_mmio_region* r,	const char* func, int line){	pr_debug("%s:%d: dev       %u:%u\n", func, line, r->dev->bus_id,		r->dev->dev_id);	pr_debug("%s:%d: bus_addr  %lxh\n", func, line, r->bus_addr);	pr_debug("%s:%d: len       %lxh\n", func, line, r->len);	pr_debug("%s:%d: lpar_addr %lxh\n", func, line, r->lpar_addr);}static int ps3_sb_mmio_region_create(struct ps3_mmio_region *r){	int result;	result = lv1_map_device_mmio_region(r->dev->bus_id, r->dev->dev_id,		r->bus_addr, r->len, r->page_size, &r->lpar_addr);	if (result) {		pr_debug("%s:%d: lv1_map_device_mmio_region failed: %s\n",			__func__, __LINE__, ps3_result(result));		r->lpar_addr = 0;	}	dump_mmio_region(r);	return result;}static int ps3_ioc0_mmio_region_create(struct ps3_mmio_region *r){	/* device specific; do nothing currently */	return 0;}int ps3_mmio_region_create(struct ps3_mmio_region *r){	return r->mmio_ops->create(r);}EXPORT_SYMBOL_GPL(ps3_mmio_region_create);static int ps3_sb_free_mmio_region(struct ps3_mmio_region *r){	int result;	dump_mmio_region(r);;	result = lv1_unmap_device_mmio_region(r->dev->bus_id, r->dev->dev_id,		r->lpar_addr);	if (result)		pr_debug("%s:%d: lv1_unmap_device_mmio_region failed: %s\n",			__func__, __LINE__, ps3_result(result));	r->lpar_addr = 0;	return result;}static int ps3_ioc0_free_mmio_region(struct ps3_mmio_region *r){	/* device specific; do nothing currently */	return 0;}int ps3_free_mmio_region(struct ps3_mmio_region *r){	return r->mmio_ops->free(r);}EXPORT_SYMBOL_GPL(ps3_free_mmio_region);static const struct ps3_mmio_region_ops ps3_mmio_sb_region_ops = {	.create = ps3_sb_mmio_region_create,	.free = ps3_sb_free_mmio_region};static const struct ps3_mmio_region_ops ps3_mmio_ioc0_region_ops = {	.create = ps3_ioc0_mmio_region_create,	.free = ps3_ioc0_free_mmio_region};int ps3_mmio_region_init(struct ps3_system_bus_device *dev,	struct ps3_mmio_region *r, unsigned long bus_addr, unsigned long len,	enum ps3_mmio_page_size page_size){	r->dev = dev;	r->bus_addr = bus_addr;	r->len = len;	r->page_size = page_size;	switch (dev->dev_type) {	case PS3_DEVICE_TYPE_SB:		r->mmio_ops = &ps3_mmio_sb_region_ops;		break;	case PS3_DEVICE_TYPE_IOC0:		r->mmio_ops = &ps3_mmio_ioc0_region_ops;		break;	default:		BUG();		return -EINVAL;	}	return 0;}EXPORT_SYMBOL_GPL(ps3_mmio_region_init);static int ps3_system_bus_match(struct device *_dev,	struct device_driver *_drv){	int result;	struct ps3_system_bus_driver *drv = ps3_drv_to_system_bus_drv(_drv);	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);	result = dev->match_id == drv->match_id;	pr_info("%s:%d: dev=%u(%s), drv=%u(%s): %s\n", __func__, __LINE__,		dev->match_id, dev->core.bus_id, drv->match_id, drv->core.name,		(result ? "match" : "miss"));	return result;}static int ps3_system_bus_probe(struct device *_dev){	int result = 0;	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);	struct ps3_system_bus_driver *drv;	BUG_ON(!dev);	pr_info(" -> %s:%d: %s\n", __func__, __LINE__, _dev->bus_id);	drv = ps3_system_bus_dev_to_system_bus_drv(dev);	BUG_ON(!drv);	if (drv->probe)		result = drv->probe(dev);	else		pr_info("%s:%d: %s no probe method\n", __func__, __LINE__,			dev->core.bus_id);	pr_info(" <- %s:%d: %s\n", __func__, __LINE__, dev->core.bus_id);	return result;}static int ps3_system_bus_remove(struct device *_dev){	int result = 0;	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);	struct ps3_system_bus_driver *drv;	BUG_ON(!dev);	pr_info(" -> %s:%d: %s\n", __func__, __LINE__, _dev->bus_id);	drv = ps3_system_bus_dev_to_system_bus_drv(dev);	BUG_ON(!drv);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美极品aⅴ影院| 蜜桃av噜噜一区二区三区小说| 久久久亚洲高清| 久久综合给合久久狠狠狠97色69| 日韩欧美你懂的| 91麻豆精品91久久久久同性| 欧美精品一卡二卡| 欧美日韩精品一区二区三区四区| 欧美无人高清视频在线观看| 在线观看日韩高清av| 欧美怡红院视频| 欧美精品18+| 日韩一区二区三区av| 精品免费视频一区二区| 久久午夜免费电影| 国产欧美日本一区视频| 国产精品国产精品国产专区不蜜 | 欧美一区二区福利在线| 日韩精品一区二区三区视频 | 丝袜亚洲另类欧美| 久久精品国产99国产| 国产精品夜夜爽| 暴力调教一区二区三区| 91国产成人在线| 在线播放亚洲一区| 久久先锋影音av| ...xxx性欧美| 香蕉久久夜色精品国产使用方法 | 一区二区三区在线视频免费 | 天堂资源在线中文精品| 日韩福利视频网| 国产经典欧美精品| 色婷婷国产精品| 欧美一卡二卡三卡| 欧美极品少妇xxxxⅹ高跟鞋| 一区二区三区在线影院| 青青青爽久久午夜综合久久午夜 | 日本精品一级二级| 日韩小视频在线观看专区| 久久品道一品道久久精品| 亚洲男人电影天堂| 九九**精品视频免费播放| 成人一区二区在线观看| 欧美日韩一区二区三区四区| 久久午夜电影网| 亚洲激情欧美激情| 韩国欧美国产一区| 欧洲精品中文字幕| 久久久www免费人成精品| 亚洲一区二区偷拍精品| 精品在线免费观看| 在线一区二区三区四区五区 | 国产欧美日产一区| 婷婷中文字幕一区三区| 国产黄色精品网站| 欧美日韩黄色影视| 国产精品国产三级国产aⅴ中文| 亚洲国产精品麻豆| 成人网在线免费视频| 91精品国产欧美日韩| 亚洲欧美自拍偷拍| 精品一二三四在线| 欧美美女一区二区三区| 国产精品久久久久四虎| 久久99精品国产麻豆不卡| 欧洲精品一区二区| 最近中文字幕一区二区三区| 激情综合色综合久久综合| 欧美日韩亚洲综合一区二区三区| 亚洲国产高清aⅴ视频| 麻豆精品在线播放| 欧美日韩aaa| 亚洲黄色小视频| 成人免费高清视频在线观看| 精品99999| 强制捆绑调教一区二区| 欧美日韩一区二区欧美激情| 国产精品久久久久久福利一牛影视 | 欧美电影一区二区| 亚洲精品乱码久久久久久| 国产99久久久精品| 精品国产乱码久久| 蓝色福利精品导航| 在线成人午夜影院| 视频一区二区国产| 欧美日韩国产123区| 亚洲少妇屁股交4| 成人av免费观看| 日本一区二区三区高清不卡| 国产资源在线一区| 精品福利av导航| 麻豆成人免费电影| 欧美一区二区三区免费在线看| 亚洲愉拍自拍另类高清精品| 99这里都是精品| 国产精品传媒入口麻豆| 成人黄色综合网站| 国产精品拍天天在线| 丁香另类激情小说| 中文字幕va一区二区三区| 国产丶欧美丶日本不卡视频| 国产午夜精品福利| 丁香激情综合五月| 国产精品福利一区| 色综合天天综合网天天看片| 一区二区三区国产| 欧美三区免费完整视频在线观看| 一区二区免费在线播放| 在线观看视频一区二区欧美日韩| 亚洲线精品一区二区三区| 欧美片在线播放| 日韩精品亚洲一区二区三区免费| 欧美一级理论性理论a| 日韩国产在线观看| 91精品国产欧美日韩| 九一九一国产精品| 日本一区二区三区视频视频| 成人激情黄色小说| 亚洲一区日韩精品中文字幕| 337p亚洲精品色噜噜狠狠| 性感美女极品91精品| 日韩美女在线视频| 国产精品一区久久久久| 国产精品久久久久久久裸模 | 久久在线免费观看| 国产成人欧美日韩在线电影| 亚洲欧美一区二区视频| 欧美性受xxxx| 美女在线一区二区| 国产欧美一二三区| 在线亚洲一区观看| 日本不卡一区二区三区| 久久久精品2019中文字幕之3| 99久久99久久精品免费观看 | 99热这里都是精品| 亚洲成年人网站在线观看| 精品国产一区二区在线观看| 成人网男人的天堂| 同产精品九九九| 国产亚洲精品中文字幕| 色婷婷久久久亚洲一区二区三区| 五月婷婷综合网| 国产网站一区二区三区| 在线日韩一区二区| 国内精品久久久久影院薰衣草 | 亚洲色图在线播放| 91精品国产综合久久久久久久久久| 韩国精品主播一区二区在线观看| 日韩伦理电影网| 欧美一区二区三区公司| 成人性生交大片| 偷窥国产亚洲免费视频| 中文字幕免费不卡| 欧美一区二区三区免费大片| www.成人在线| 久久疯狂做爰流白浆xx| 亚洲日本免费电影| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美综合欧美视频| 国产成人亚洲综合a∨猫咪| 无吗不卡中文字幕| 国产精品久久精品日日| 日韩色在线观看| 欧美亚洲一区二区在线观看| 国产精品一区二区三区乱码| 亚洲第一福利视频在线| 国产精品美女久久久久久久网站| 亚洲色图制服丝袜| 日韩免费高清电影| 欧美性xxxxx极品少妇| 高清国产午夜精品久久久久久| 日韩av二区在线播放| 亚洲欧美视频在线观看| 337p日本欧洲亚洲大胆精品| 欧美丰满少妇xxxbbb| av在线一区二区| 国产成人精品免费在线| 麻豆精品久久精品色综合| 亚洲国产精品久久人人爱| 国产精品久久久久桃色tv| 26uuu国产一区二区三区 | 午夜精品福利一区二区三区av | 一区二区在线观看免费| 欧美国产精品v| 久久综合狠狠综合久久综合88| 欧美一级欧美三级在线观看| 91丨九色丨黑人外教| 国产电影一区二区三区| 国产一区二区三区| 捆绑调教一区二区三区| 日韩中文字幕av电影| 亚洲国产精品尤物yw在线观看| 亚洲三级电影网站| 亚洲视频精选在线| 亚洲三级在线观看| 中文字幕在线不卡视频| 国产精品乱人伦| 国产精品免费久久久久| 国产欧美日韩视频一区二区| 久久精品人人做人人综合|