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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? system-bus.c

?? linux內(nèi)核源碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* *  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);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频黄久久| 亚洲色图视频网| 成人av综合一区| 三级亚洲高清视频| 国产精品美女久久久久久久| 欧美唯美清纯偷拍| 国产99精品视频| 天天综合天天做天天综合| 欧美激情艳妇裸体舞| 午夜精品成人在线视频| 一区二区成人在线| 一区二区三区在线视频播放| 亚洲综合久久久| 亚洲成人久久影院| 日本不卡的三区四区五区| 蜜臀av一级做a爰片久久| 一本大道综合伊人精品热热 | 亚洲女爱视频在线| 亚洲乱码中文字幕| 亚洲午夜激情网页| 青青草伊人久久| 国产一区久久久| 成人中文字幕合集| 在线亚洲高清视频| 欧美一级一区二区| 国产日韩综合av| 亚洲男同性视频| 日韩精品乱码av一区二区| 麻豆91精品视频| 成人在线视频首页| 在线亚洲人成电影网站色www| 欧美群妇大交群的观看方式| 欧美tickling挠脚心丨vk| 亚洲国产精品二十页| 亚洲一区中文日韩| 精品一区中文字幕| av一二三不卡影片| 7777精品伊人久久久大香线蕉超级流畅 | 一本色道亚洲精品aⅴ| 欧美日韩免费不卡视频一区二区三区 | 日韩免费电影网站| 国产人久久人人人人爽| 亚洲自拍另类综合| 国内精品久久久久影院一蜜桃| 99久久综合国产精品| 欧美日本国产视频| 一本久久综合亚洲鲁鲁五月天 | 国产欧美精品一区| 中文在线资源观看网站视频免费不卡 | 7777精品久久久大香线蕉| 国模无码大尺度一区二区三区| 国产98色在线|日韩| 欧美丝袜自拍制服另类| 国产日产欧美一区| 三级不卡在线观看| 成人久久18免费网站麻豆| 欧美日韩一区在线观看| 国产亚洲人成网站| 亚洲成a人片在线不卡一二三区| 国精产品一区一区三区mba视频| 色婷婷久久久久swag精品| 日韩欧美国产小视频| 亚洲私人影院在线观看| 久久成人久久爱| 欧美亚洲国产一区二区三区| 国产农村妇女毛片精品久久麻豆| 天天综合色天天| 91免费视频网址| 久久嫩草精品久久久久| 亚洲电影一级片| 91在线一区二区三区| 久久久久国产精品人| 秋霞电影一区二区| 在线这里只有精品| 综合久久给合久久狠狠狠97色 | 国产福利一区二区三区视频 | 亚洲午夜一区二区三区| 成人黄色小视频| 亚洲精品一区二区三区在线观看| 香蕉成人伊视频在线观看| av中文字幕亚洲| 国产视频一区不卡| 韩国视频一区二区| 欧美高清视频在线高清观看mv色露露十八 | 成人免费看视频| www国产成人| 国精品**一区二区三区在线蜜桃| 欧美一级在线免费| 日韩成人午夜电影| 7799精品视频| 日韩av午夜在线观看| 欧美人动与zoxxxx乱| 亚洲国产欧美日韩另类综合 | 国产精品美女久久久久久久| 国产黄色精品网站| 精品免费一区二区三区| 欧美a级一区二区| 欧美一区二区三区公司| 日本少妇一区二区| 欧美一区二视频| 蜜臀av在线播放一区二区三区| 欧美精选一区二区| 男女男精品视频网| 日韩一区二区在线免费观看| 免费在线看成人av| 亚洲成人精品一区| 欧美高清激情brazzers| 五月天久久比比资源色| 日韩一区二区三区视频在线| 男人的天堂久久精品| 精品福利一区二区三区| 国产成人精品在线看| 国产精品乱码久久久久久| 99久久精品免费精品国产| 一区二区视频在线| 欧美日韩欧美一区二区| 日韩精品一区第一页| 欧美成人aa大片| 国产精品亚洲午夜一区二区三区| 国产精品久久久久久久久图文区| 99在线热播精品免费| 亚洲一区二区视频在线| 91精品国产综合久久福利软件 | 99久久精品国产导航| 亚洲免费在线观看视频| 欧美三级电影在线看| 免费成人美女在线观看.| 久久久蜜臀国产一区二区| 成人h动漫精品| 亚洲va欧美va人人爽午夜| 欧美电影免费观看高清完整版在 | 国产欧美日韩综合| 99视频在线精品| 日韩av电影天堂| 国产欧美视频在线观看| 欧美无砖专区一中文字| 久久69国产一区二区蜜臀| 国产精品第13页| 欧美日韩高清一区二区三区| 国产曰批免费观看久久久| 亚洲欧美色综合| 欧美videos中文字幕| 91女神在线视频| 极品少妇一区二区| 亚洲精品视频自拍| 精品久久久久久亚洲综合网| av在线免费不卡| 另类小说图片综合网| 成人欧美一区二区三区| 日韩欧美国产电影| 日本丰满少妇一区二区三区| 精品一区精品二区高清| 亚洲精品国产精华液| 精品国产一区二区三区四区四| 成人妖精视频yjsp地址| 免费不卡在线观看| 亚洲女人****多毛耸耸8| www日韩大片| 欧美人与禽zozo性伦| 99在线精品观看| 国产精品综合久久| 午夜av区久久| 亚洲精品欧美激情| 国产日韩av一区| 欧美xxxxx牲另类人与| 欧美在线一区二区三区| 成人午夜激情影院| 久久超碰97人人做人人爱| 亚洲一区二区三区影院| 亚洲欧洲av一区二区三区久久| 日韩三级在线免费观看| 欧美色老头old∨ideo| av午夜精品一区二区三区| 国产一区在线精品| 免费成人在线影院| 香蕉乱码成人久久天堂爱免费| 日韩伦理av电影| 欧美国产精品v| 精品国产3级a| 日韩三级视频在线看| 欧美人动与zoxxxx乱| 欧美亚洲图片小说| 在线影视一区二区三区| 91丨九色porny丨蝌蚪| 成人免费电影视频| 国产精品中文有码| 国产一区二区三区免费播放| 秋霞午夜av一区二区三区| 香蕉av福利精品导航| 亚洲国产va精品久久久不卡综合| 亚洲精品免费一二三区| 亚洲日本护士毛茸茸| 国产精品免费av| 国产精品色婷婷久久58| 国产亚洲va综合人人澡精品 | 亚洲综合视频在线观看| 亚洲免费在线电影| 亚洲麻豆国产自偷在线| 亚洲人成精品久久久久| 国产精品免费aⅴ片在线观看|