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

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

?? usb-uhci-hub.c

?? linux客戶機函數(shù)定義的實際例子
?? C
字號:
/*  
    UHCI HCD (Host Controller Driver) for USB, UHCI Root Hub
    
    (c) 1999-2002 
    Georg Acher      +    Deti Fliegl    +    Thomas Sailer
    georg@acher.org      deti@fliegl.de   sailer@ife.ee.ethz.ch
   
    with the help of
    David Brownell, david-b@pacbell.net
    Adam Richter, adam@yggdrasil.com
    Roman Weissgaerber, weissg@vienna.at
    
    HW-initalization based on material of
    Randy Dunlap + Johannes Erdfelt + Gregory P. Smith + Linus Torvalds 

    $Id: usb-uhci-hub.c,v 1.2 2002/05/21 21:40:16 acher Exp $
*/

#define CLR_RH_PORTSTAT(x) \
		status = inw(io_addr+USBPORTSC1+2*(wIndex-1)); \
		status = (status & 0xfff5) & ~(x); \
		outw(status, io_addr+USBPORTSC1+2*(wIndex-1))

#define SET_RH_PORTSTAT(x) \
		status = inw(io_addr+USBPORTSC1+2*(wIndex-1)); \
		status = (status & 0xfff5) | (x); \
		outw(status, io_addr+USBPORTSC1+2*(wIndex-1))

static int oldval=-1;

/* build "status change" packet (one or two bytes) from HC registers 
   Since uhci_hub_status_data is called by a SW timer, it is also used
   for monitoring HC health */
static int uhci_hub_status_data (struct usb_hcd *hcd, char *buf)
{
	struct uhci_hcd *uhci = hcd_to_uhci (hcd);
	unsigned long io_addr = (unsigned long)uhci->hcd.regs;
	int i, len=0, data = 0, portstate;
	int changed=0;

	for (i = 0; i < uhci->maxports; i++) {
		portstate=inw (io_addr + USBPORTSC1 + i * 2);
#if 0
		if (i==0 && (portstate&0xf) != (oldval&0xf))
			err("Port %i: %x", i+1, portstate);
#endif
		if (i==0)
			oldval=portstate;
		if ((portstate & 0xa) > 0) {
			changed=1;
		}
		data |= ((portstate & 0xa) > 0 ? (1 << (i + 1)) : 0);
		len = (i + 1) / 8 + 1;
	}


	*(__u16 *)buf = cpu_to_le16 (data);

	// Watchdog

	if (uhci->running && time_after(jiffies, uhci->last_hcd_irq + WATCHDOG_TIMEOUT)) {
		if (uhci->reanimations > MAX_REANIMATIONS) {
			err("He's dead, Jim. Giving up reanimating the UHCI host controller.\n"
			    "Maybe a real module reload helps...");
			uhci->running = 0;
		}
		else {	
			uhci->running = 0;
			uhci->need_init=1; // init done in the next submit_urb
		}
	}
	return changed?len:0;
}
/*-------------------------------------------------------------------------*/
static void uhci_hub_descriptor (struct uhci_hcd *uhci, struct usb_hub_descriptor *desc) 
{
	int		ports = uhci->maxports;
	u16		temp;
	desc->bDescriptorType = 0x29;
	desc->bPwrOn2PwrGood = 1;
	desc->bHubContrCurrent = 0;
	desc->bNbrPorts = ports;
	temp = 1 + (ports / 8);
	desc->bDescLength = 7 + 2 * temp;
	desc->wHubCharacteristics = 0;	
	desc-> bitmap[0] = 0;
	desc-> bitmap[1] = 0xff;
}
/*-------------------------------------------------------------------------*/
static int uhci_hub_control (
        struct usb_hcd  *hcd,
        u16             typeReq,
        u16             wValue,
        u16             wIndex,
        char            *buf,
        u16             wLength) 
{
	struct uhci_hcd *uhci = hcd_to_uhci (hcd);
	int status = 0;
	int stat = 0;
	int cstatus;
	unsigned long io_addr = (unsigned long)uhci->hcd.regs;
	int		ports = uhci->maxports;

	switch (typeReq) {	

	case ClearHubFeature:
		break;

	case ClearPortFeature:
		if (!wIndex || wIndex > ports)
                        goto error;

		switch (wValue) {
		case USB_PORT_FEAT_ENABLE:
			CLR_RH_PORTSTAT (USBPORTSC_PE);
			break;
		case USB_PORT_FEAT_C_ENABLE:
			SET_RH_PORTSTAT (USBPORTSC_PEC);
			break;

		case USB_PORT_FEAT_SUSPEND:
			CLR_RH_PORTSTAT (USBPORTSC_SUSP);
			break;
		case USB_PORT_FEAT_C_SUSPEND:
			/*** WR_RH_PORTSTAT(RH_PS_PSSC); */
			break;

		case USB_PORT_FEAT_POWER:
		       	break;/* port power ** */

		case USB_PORT_FEAT_C_CONNECTION:
			SET_RH_PORTSTAT (USBPORTSC_CSC);
			break;
		
		case USB_PORT_FEAT_C_OVER_CURRENT:
			break;	/* port power over current ** */

		case USB_PORT_FEAT_C_RESET:
			break;
		default:
			goto error;
		}
		break;

	case GetHubDescriptor:
                uhci_hub_descriptor (uhci, (struct usb_hub_descriptor *) buf);
                break;

	case GetHubStatus:
		*(u32 *) buf = cpu_to_le32 (0);
		break;

	case GetPortStatus:
		if (!wIndex || wIndex > ports)
			goto error;

		status = inw (io_addr + USBPORTSC1 + 2 * (wIndex - 1));
		cstatus = ((status & USBPORTSC_CSC) >> (1 - 0)) |
			((status & USBPORTSC_PEC) >> (3 - 1));

		status = (status & USBPORTSC_CCS) |
			((status & USBPORTSC_PE) >> (2 - 1)) |
			((status & USBPORTSC_SUSP) >> (12 - 2)) |
			((status & USBPORTSC_PR) >> (9 - 4)) |
			(1 << 8) |	/* power on ** */
			((status & USBPORTSC_LSDA) << (-8 + 9));

		*(__u16 *) buf = cpu_to_le16 (status);
		*(__u16 *) (buf + 2) = cpu_to_le16 (cstatus);
		break;

	case SetHubFeature:
		// FIXME
		break;

	case SetPortFeature: 
		if (!wIndex || wIndex > ports)
			goto error;
			
		switch (wValue) {
		case USB_PORT_FEAT_SUSPEND:
			SET_RH_PORTSTAT (USBPORTSC_SUSP);
			break;
		case USB_PORT_FEAT_RESET:
			SET_RH_PORTSTAT (USBPORTSC_PR);
			uhci_wait_ms (10);
			CLR_RH_PORTSTAT (USBPORTSC_PR);
			udelay (10);
			SET_RH_PORTSTAT (USBPORTSC_PE);
			uhci_wait_ms (10);
			SET_RH_PORTSTAT (0xa);
			break;
		case USB_PORT_FEAT_POWER:
			break;	/* port power ** */
		case  USB_PORT_FEAT_ENABLE:
			SET_RH_PORTSTAT (USBPORTSC_PE);
			break;
		default:
			goto error;
		}
		break;
				
	default:
error:		
		stat = -EPIPE;
	}

	dbg("Root-Hub stat port1: %x port2: %x",
	     inw (io_addr + USBPORTSC1), inw (io_addr + USBPORTSC2));

	return stat;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产又黄又大久久| 日韩欧美精品三级| 成人免费视频一区| 国产iv一区二区三区| 韩国欧美国产1区| 国产精品99久| 国产99精品国产| 99视频一区二区| 91一区二区在线| av在线不卡网| 欧美无人高清视频在线观看| 欧美体内she精高潮| 欧美理论在线播放| 日韩三级av在线播放| 精品国产免费久久| 国产欧美日韩中文久久| 国产精品久久午夜夜伦鲁鲁| 亚洲精品免费在线观看| 天天综合网天天综合色| 美女视频黄 久久| 国产精品99久久久久久宅男| www.久久精品| 欧美日精品一区视频| 91麻豆精品国产自产在线| 日韩欧美aaaaaa| 中文字幕巨乱亚洲| 日韩理论片一区二区| 首页国产欧美久久| 国内偷窥港台综合视频在线播放| 成人黄色电影在线| 日本久久电影网| 日韩亚洲欧美在线观看| 国产日产欧美一区| 一区二区三区在线不卡| 毛片av一区二区| 成熟亚洲日本毛茸茸凸凹| 欧美亚洲一区二区在线| 日韩欧美成人激情| 成人免费小视频| 男人操女人的视频在线观看欧美| 国产成人综合视频| 在线观看不卡视频| 久久综合九色综合97婷婷| 亚洲同性同志一二三专区| 青青草国产精品亚洲专区无| 国产91丝袜在线观看| 欧美日韩中文字幕一区二区| 久久影院午夜论| 亚洲黄色免费网站| 国产一区二区精品久久99| 在线免费视频一区二区| 国产午夜精品一区二区三区视频 | 亚洲综合色视频| 久草这里只有精品视频| 色综合色狠狠综合色| wwwwxxxxx欧美| 亚洲h在线观看| 成人av中文字幕| 精品成人一区二区| 亚洲午夜久久久久久久久电影网| 国产精品99久久久久久有的能看 | 国产亚洲欧美激情| 午夜精品福利在线| 91老司机福利 在线| 精品99一区二区| 亚洲成av人在线观看| av电影天堂一区二区在线观看| 亚洲精品一区二区在线观看| 亚洲精品日韩综合观看成人91| 国产一区二区三区在线观看精品| 欧美福利视频一区| 亚洲欧美另类久久久精品2019| 国产在线精品视频| 欧美一级电影网站| 亚洲最大成人网4388xx| 成人国产亚洲欧美成人综合网| 欧美大胆一级视频| 日日夜夜精品视频天天综合网| proumb性欧美在线观看| 久久精品一区二区三区不卡牛牛| 三级在线观看一区二区| 91官网在线免费观看| 国产精品无码永久免费888| 极品瑜伽女神91| 91精品国产综合久久久久| 一区二区三区四区av| 不卡一卡二卡三乱码免费网站| 国产视频一区在线观看| 久久www免费人成看片高清| 欧美丝袜自拍制服另类| 亚洲三级免费电影| 97久久超碰国产精品电影| 中文字幕av一区二区三区| 国内精品伊人久久久久av影院| 日韩视频国产视频| 日本不卡不码高清免费观看 | 亚洲一区在线观看免费| 99久久精品免费看| 国产精品不卡在线观看| av在线这里只有精品| 国产精品高清亚洲| 波多野洁衣一区| 亚洲日本护士毛茸茸| 91丨九色丨黑人外教| 亚洲日本成人在线观看| 色综合中文字幕国产 | 97久久精品人人爽人人爽蜜臀| 国产欧美精品一区aⅴ影院| 捆绑紧缚一区二区三区视频| 欧美大片在线观看| 国产精品一区2区| 国产精品五月天| 色婷婷综合久久久久中文一区二区| 亚洲婷婷综合久久一本伊一区| 91网站黄www| 亚洲无人区一区| 4438亚洲最大| 经典三级在线一区| 欧美国产视频在线| 色综合av在线| 日韩电影免费在线| 精品国产凹凸成av人导航| 国产一区美女在线| 国产精品久久久久三级| 日本乱码高清不卡字幕| 亚洲国产精品久久一线不卡| 欧美电影在线免费观看| 久久草av在线| 综合欧美亚洲日本| 在线不卡的av| 国产美女视频91| 亚洲精品亚洲人成人网| 91精品一区二区三区在线观看| 国产一区二区精品在线观看| 中文字幕视频一区二区三区久| 欧美亚洲动漫精品| 日韩精品欧美成人高清一区二区| 日韩欧美亚洲国产另类| 成人黄色大片在线观看| 亚洲va欧美va人人爽午夜| 久久久久国色av免费看影院| 97精品久久久午夜一区二区三区 | 国产成人丝袜美腿| 亚洲黄色片在线观看| 欧美电影免费提供在线观看| 国产91综合一区在线观看| 亚洲成av人片| 国产肉丝袜一区二区| 在线观看三级视频欧美| 激情久久五月天| 一区二区三区免费在线观看| 欧美α欧美αv大片| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 91麻豆swag| 麻豆91在线播放免费| 亚洲情趣在线观看| 精品国产污网站| 欧美在线一二三| 成人中文字幕在线| 日韩精品一级中文字幕精品视频免费观看 | 国产精品传媒入口麻豆| 日韩亚洲欧美综合| 色国产综合视频| 国产成人综合在线观看| 日本最新不卡在线| 亚洲精品日韩一| 国产欧美日本一区视频| 欧美一区二区三区免费观看视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 免费xxxx性欧美18vr| 国产精品灌醉下药二区| 久久婷婷色综合| 91麻豆精品国产91久久久久久久久| zzijzzij亚洲日本少妇熟睡| 久久er99热精品一区二区| 亚洲电影中文字幕在线观看| 亚洲手机成人高清视频| 欧美国产日韩在线观看| 精品国产一区二区精华| 在线综合视频播放| 欧美日韩亚洲综合在线| 99精品热视频| 国产成人精品www牛牛影视| 精彩视频一区二区| 久久国产人妖系列| 婷婷开心久久网| 亚洲老司机在线| 中文字幕在线一区二区三区| 国产亚洲精品中文字幕| 欧美成人艳星乳罩| 欧美电视剧免费观看| 日韩欧美一级二级三级| 日韩一级大片在线| 日韩免费电影网站| 日韩美女天天操| 日韩精品一区二区三区中文精品| 欧美一区二区女人| 欧美老年两性高潮| 在线不卡a资源高清| 91精品国产日韩91久久久久久|