亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产精品亚洲第一区在线暖暖韩国| 成人国产精品免费| 成人av在线资源网| 91麻豆精品国产91久久久更新时间| 中文子幕无线码一区tr| 老司机午夜精品| 3d动漫精品啪啪一区二区竹菊| 亚洲乱码一区二区三区在线观看| 精品一区二区三区蜜桃| 欧美日本在线观看| 亚洲一区二区三区四区中文字幕| 国产精品2024| 久久色视频免费观看| 日韩影院免费视频| 欧美老女人在线| 亚洲高清免费视频| 欧美视频一区二区三区在线观看| 中文字幕av免费专区久久| 国产精品一区一区三区| 日韩欧美视频在线| 青青草97国产精品免费观看| 欧美视频在线观看一区二区| 亚洲人成影院在线观看| 波多野洁衣一区| 亚洲欧洲韩国日本视频| 欧美日韩综合色| 亚洲午夜免费电影| 欧美日韩国产在线观看| 日韩精品一区第一页| 91精品国产综合久久久久久久 | 欧美日韩三级在线| 亚洲乱码中文字幕综合| 91久久精品一区二区二区| 日韩毛片高清在线播放| 99视频超级精品| 亚洲激情一二三区| 欧美日韩中文字幕一区| 亚洲成av人片| 日韩一级免费观看| 国产美女视频一区| 国产精品网站在线观看| 不卡的电影网站| 亚洲色图.com| 在线视频国产一区| 天堂成人国产精品一区| 欧美va亚洲va在线观看蝴蝶网| 国产在线精品一区在线观看麻豆| 久久午夜电影网| 北岛玲一区二区三区四区| 亚洲色图.com| 日韩视频123| 国产成人精品一区二区三区网站观看| 久久精品视频一区| 一本色道**综合亚洲精品蜜桃冫 | 99久精品国产| 亚洲线精品一区二区三区八戒| 正在播放一区二区| 国产成人精品免费| 亚洲精品成人天堂一二三| 欧美人与性动xxxx| 国产精品综合在线视频| 亚洲精品大片www| 日韩欧美国产高清| 色94色欧美sute亚洲线路一久 | 成人精品国产一区二区4080| 亚洲男女一区二区三区| 日韩欧美自拍偷拍| 91亚洲资源网| 国产麻豆一精品一av一免费| 亚洲精品乱码久久久久久| 欧美一级淫片007| 99视频在线精品| 久久精品国产精品亚洲精品| 亚洲免费视频中文字幕| 精品国内片67194| 欧美在线免费观看视频| 国产福利一区二区三区在线视频| 亚洲国产日韩av| 久久久国产精品麻豆| 欧美肥妇毛茸茸| av欧美精品.com| 久久疯狂做爰流白浆xx| 午夜一区二区三区在线观看| 国产欧美一区二区精品婷婷 | 91网站在线播放| 狠狠久久亚洲欧美| 午夜欧美电影在线观看| 亚洲日本在线天堂| 国产婷婷一区二区| 欧美大白屁股肥臀xxxxxx| 在线观看不卡一区| 99re这里只有精品视频首页| 精品一区二区三区日韩| 日韩主播视频在线| 亚洲国产中文字幕在线视频综合 | 99久久久免费精品国产一区二区| 日本不卡123| 夜夜亚洲天天久久| 亚洲欧洲综合另类在线| 久久精品一区二区三区不卡| 日韩一区二区视频在线观看| 欧美综合在线视频| 在线精品视频一区二区三四| av毛片久久久久**hd| 国产91高潮流白浆在线麻豆| 国产精品一区一区三区| 国产真实乱子伦精品视频| 狠狠久久亚洲欧美| 国产精品一区一区三区| 精品综合免费视频观看| 麻豆国产精品一区二区三区| 美女看a上一区| 另类小说图片综合网| 黑人精品欧美一区二区蜜桃 | 日韩av中文字幕一区二区| 一区二区三区四区高清精品免费观看| 国产精品美女久久久久久2018| 日本一区二区三级电影在线观看| 久久久久久久久久美女| 国产亚洲va综合人人澡精品| 欧美激情一区二区三区全黄| 中文在线资源观看网站视频免费不卡 | 日韩国产精品久久久久久亚洲| 午夜久久久久久| 免费高清在线视频一区·| 久久国产免费看| 国产精品一区2区| 99久久婷婷国产综合精品| 91麻豆国产福利在线观看| 欧美亚洲国产bt| 91麻豆精品国产91久久久久久 | 亚洲成人免费电影| 青青草国产成人99久久| 国产在线精品一区二区夜色 | 日韩精品亚洲一区| 美国十次综合导航| 国产69精品久久99不卡| 91麻豆国产精品久久| 欧美一区二区三区视频在线观看| 精品国一区二区三区| 亚洲欧美在线观看| 秋霞影院一区二区| 国产白丝精品91爽爽久久| 91国产视频在线观看| 欧美一区二区三区视频| 国产欧美一区二区精品性色 | 国产成人自拍高清视频在线免费播放| 丁香亚洲综合激情啪啪综合| 日本精品裸体写真集在线观看| 日韩午夜在线播放| 国产精品福利在线播放| 日本欧美一区二区在线观看| 不卡电影一区二区三区| 91精品国产综合久久久蜜臀图片 | 色婷婷一区二区| 久久综合色天天久久综合图片| 国产精品成人午夜| 久久99最新地址| 欧美性大战久久久久久久蜜臀| 精品国产一区二区三区久久久蜜月| 国产精品久久久久影院老司| 免费成人在线视频观看| 色综合色狠狠综合色| 欧美精品一区二区久久婷婷| 亚洲理论在线观看| 国产精品白丝jk白祙喷水网站| 欧美在线啊v一区| 国产欧美日韩精品一区| 免费欧美在线视频| 欧美性高清videossexo| 国产精品久久久久久久浪潮网站 | 在线精品观看国产| 国产精品久久久久久久裸模| 极品少妇一区二区| 在线播放中文字幕一区| 亚洲精品成人悠悠色影视| 高清视频一区二区| 精品福利一区二区三区免费视频| 亚洲一区中文日韩| 一本色道久久综合精品竹菊| 国产精品视频一区二区三区不卡| 久88久久88久久久| 日韩欧美一区二区免费| 免费日本视频一区| 91精品国产免费| 婷婷六月综合网| 欧美日韩五月天| 亚洲第一在线综合网站| 91久久免费观看| 亚洲一二三四在线| 在线日韩av片| 一区二区三区在线影院| 色综合激情久久| 亚洲精品免费电影| 色狠狠色狠狠综合| 亚洲自拍偷拍av| 91精品国产综合久久国产大片| 性久久久久久久久| 欧美一级在线视频| 国内成人自拍视频|