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

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

?? usbdcore_omap1510.c

?? OMAP1510的USB驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
					       DEVICE_HUB_CONFIGURED, 0);			if (final == STATE_POWERED)				break;		case STATE_POWERED:			usbd_device_event_irq (udc_device, DEVICE_RESET, 0);			if (final == STATE_DEFAULT)				break;		case STATE_DEFAULT:			usbd_device_event_irq (udc_device,					       DEVICE_ADDRESS_ASSIGNED, 0);			if (final == STATE_ADDRESSED)				break;		case STATE_ADDRESSED:			usbd_device_event_irq (udc_device, DEVICE_CONFIGURED,					       0);		case STATE_CONFIGURED:			break;		default:			break;		}	}}static void udc_state_transition_down (usb_device_state_t initial,				       usb_device_state_t final){	if (initial > final) {		switch (initial) {		case STATE_CONFIGURED:			usbd_device_event_irq (udc_device, DEVICE_DE_CONFIGURED, 0);			if (final == STATE_ADDRESSED)				break;		case STATE_ADDRESSED:			usbd_device_event_irq (udc_device, DEVICE_RESET, 0);			if (final == STATE_DEFAULT)				break;		case STATE_DEFAULT:			usbd_device_event_irq (udc_device, DEVICE_POWER_INTERRUPTION, 0);			if (final == STATE_POWERED)				break;		case STATE_POWERED:			usbd_device_event_irq (udc_device, DEVICE_HUB_RESET, 0);		case STATE_ATTACHED:			break;		default:			break;		}	}}/* Handle all device state changes. * This function implements TRM Figure 14-21. */static void omap1510_udc_state_changed (void){	u16 bits;	u16 devstat = inw (UDC_DEVSTAT);	UDCDBGA ("state changed, devstat %x, old %x", devstat, udc_devstat);	bits = devstat ^ udc_devstat;	if (bits) {		if (bits & UDC_ATT) {			if (devstat & UDC_ATT) {				UDCDBG ("device attached and powered");				udc_state_transition_up (udc_device->device_state, STATE_POWERED);			} else {				UDCDBG ("device detached or unpowered");				udc_state_transition_down (udc_device->device_state, STATE_ATTACHED);			}		}		if (bits & UDC_USB_Reset) {			if (devstat & UDC_USB_Reset) {				UDCDBG ("device reset in progess");				udc_state_transition_down (udc_device->device_state, STATE_POWERED);			} else {				UDCDBG ("device reset completed");			}		}		if (bits & UDC_DEF) {			if (devstat & UDC_DEF) {				UDCDBG ("device entering default state");				udc_state_transition_up (udc_device->device_state, STATE_DEFAULT);			} else {				UDCDBG ("device leaving default state");				udc_state_transition_down (udc_device->device_state, STATE_POWERED);			}		}		if (bits & UDC_SUS) {			if (devstat & UDC_SUS) {				UDCDBG ("entering suspended state");				usbd_device_event_irq (udc_device, DEVICE_BUS_INACTIVE, 0);			} else {				UDCDBG ("leaving suspended state");				usbd_device_event_irq (udc_device, DEVICE_BUS_ACTIVITY, 0);			}		}		if (bits & UDC_R_WK_OK) {			UDCDBGA ("remote wakeup %s", (devstat & UDC_R_WK_OK)				 ? "enabled" : "disabled");		}		if (bits & UDC_ADD) {			if (devstat & UDC_ADD) {				UDCDBG ("default -> addressed");				udc_state_transition_up (udc_device->device_state, STATE_ADDRESSED);			} else {				UDCDBG ("addressed -> default");				udc_state_transition_down (udc_device->device_state, STATE_DEFAULT);			}		}		if (bits & UDC_CFG) {			if (devstat & UDC_CFG) {				UDCDBG ("device configured");				/* The ep0_recv_setup function generates the				 * DEVICE_CONFIGURED event when a				 * USB_REQ_SET_CONFIGURATION setup packet is				 * received, so we should already be in the				 * state STATE_CONFIGURED.				 */				udc_state_transition_up (udc_device->device_state, STATE_CONFIGURED);			} else {				UDCDBG ("device deconfigured");				udc_state_transition_down (udc_device->device_state, STATE_ADDRESSED);			}		}	}	/* Clear interrupt source */	outw (UDC_DS_Chg, UDC_IRQ_SRC);	/* Save current DEVSTAT */	udc_devstat = devstat;}/* Handle SETUP USB interrupt. * This function implements TRM Figure 14-14. */static void omap1510_udc_setup (struct usb_endpoint_instance *endpoint){	UDCDBG ("-> Entering device setup");	do {		const int setup_pktsize = 8;		unsigned char *datap =			(unsigned char *) &ep0_urb->device_request;		/* Gain access to EP 0 setup FIFO */		outw (UDC_Setup_Sel, UDC_EP_NUM);		/* Read control request data */		insb (UDC_DATA, datap, setup_pktsize);		UDCDBGA ("EP0 setup read [%x %x %x %x %x %x %x %x]",			 *(datap + 0), *(datap + 1), *(datap + 2),			 *(datap + 3), *(datap + 4), *(datap + 5),			 *(datap + 6), *(datap + 7));		/* Reset EP0 setup FIFO */		outw (0, UDC_EP_NUM);	} while (inw (UDC_IRQ_SRC) & UDC_Setup);	/* Try to process setup packet */	if (ep0_recv_setup (ep0_urb)) {		/* Not a setup packet, stall next EP0 transaction */		udc_stall_ep (0);		UDCDBG ("can't parse setup packet, still waiting for setup");		return;	}	/* Check direction */	if ((ep0_urb->device_request.bmRequestType & USB_REQ_DIRECTION_MASK)	    == USB_REQ_HOST2DEVICE) {		UDCDBG ("control write on EP0");		if (le16_to_cpu (ep0_urb->device_request.wLength)) {			/* We don't support control write data stages.			 * The only standard control write request with a data			 * stage is SET_DESCRIPTOR, and ep0_recv_setup doesn't			 * support that so we just stall those requests.  A			 * function driver might support a non-standard			 * write request with a data stage, but it isn't			 * obvious what we would do with the data if we read it			 * so we'll just stall it.  It seems like the API isn't			 * quite right here.			 */#if 0			/* Here is what we would do if we did support control			 * write data stages.			 */			ep0_urb->actual_length = 0;			outw (0, UDC_EP_NUM);			/* enable the EP0 rx FIFO */			outw (UDC_Set_FIFO_En, UDC_CTRL);#else			/* Stall this request */			UDCDBG ("Stalling unsupported EP0 control write data "				"stage.");			udc_stall_ep (0);#endif		} else {			omap1510_prepare_for_control_write_status (ep0_urb);		}	} else {		UDCDBG ("control read on EP0");		/* The ep0_recv_setup function has already placed our response		 * packet data in ep0_urb->buffer and the packet length in		 * ep0_urb->actual_length.		 */		endpoint->tx_urb = ep0_urb;		endpoint->sent = 0;		/* select the EP0 tx FIFO */		outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);		/* Write packet data to the FIFO.  omap1510_write_noniso_tx_fifo		 * will update endpoint->last with the number of bytes written		 * to the FIFO.		 */		omap1510_write_noniso_tx_fifo (endpoint);		/* enable the FIFO to start the packet transmission */		outw (UDC_Set_FIFO_En, UDC_CTRL);		/* deselect the EP0 tx FIFO */		outw (UDC_EP_Dir, UDC_EP_NUM);	}	UDCDBG ("<- Leaving device setup");}/* Handle endpoint 0 RX interrupt * This routine implements TRM Figure 14-16. */static void omap1510_udc_ep0_rx (struct usb_endpoint_instance *endpoint){	unsigned short status;	UDCDBG ("RX on EP0");	/* select EP0 rx FIFO */	outw (UDC_EP_Sel, UDC_EP_NUM);	status = inw (UDC_STAT_FLG);	if (status & UDC_ACK) {		/* Check direction */		if ((ep0_urb->device_request.bmRequestType		     & USB_REQ_DIRECTION_MASK) == USB_REQ_HOST2DEVICE) {			/* This rx interrupt must be for a control write data			 * stage packet.			 *			 * We don't support control write data stages.			 * We should never end up here.			 */			/* clear the EP0 rx FIFO */			outw (UDC_Clr_EP, UDC_CTRL);			/* deselect the EP0 rx FIFO */			outw (0, UDC_EP_NUM);			UDCDBG ("Stalling unexpected EP0 control write "				"data stage packet");			udc_stall_ep (0);		} else {			/* This rx interrupt must be for a control read status			 * stage packet.			 */			UDCDBG ("ACK on EP0 control read status stage packet");			/* deselect EP0 rx FIFO */			outw (0, UDC_EP_NUM);		}	} else if (status & UDC_STALL) {		UDCDBG ("EP0 stall during RX");		/* deselect EP0 rx FIFO */		outw (0, UDC_EP_NUM);	} else {		/* deselect EP0 rx FIFO */		outw (0, UDC_EP_NUM);	}}/* Handle endpoint 0 TX interrupt * This routine implements TRM Figure 14-18. */static void omap1510_udc_ep0_tx (struct usb_endpoint_instance *endpoint){	unsigned short status;	struct usb_device_request *request = &ep0_urb->device_request;	UDCDBG ("TX on EP0");	/* select EP0 TX FIFO */	outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);	status = inw (UDC_STAT_FLG);	if (status & UDC_ACK) {		/* Check direction */		if ((request->bmRequestType & USB_REQ_DIRECTION_MASK) ==		    USB_REQ_HOST2DEVICE) {			/* This tx interrupt must be for a control write status			 * stage packet.			 */			UDCDBG ("ACK on EP0 control write status stage packet");			/* deselect EP0 TX FIFO */			outw (UDC_EP_Dir, UDC_EP_NUM);		} else {			/* This tx interrupt must be for a control read data			 * stage packet.			 */			int wLength = le16_to_cpu (request->wLength);			/* Update our count of bytes sent so far in this			 * transfer.			 */			endpoint->sent += endpoint->last;			/* We are finished with this transfer if we have sent			 * all of the bytes in our tx urb (urb->actual_length)			 * unless we need a zero-length terminating packet.  We			 * need a zero-length terminating packet if we returned			 * fewer bytes than were requested (wLength) by the host,			 * and the number of bytes we returned is an exact			 * multiple of the packet size endpoint->tx_packetSize.			 */			if ((endpoint->sent == ep0_urb->actual_length)			    && ((ep0_urb->actual_length == wLength)				|| (endpoint->last !=				    endpoint->tx_packetSize))) {				/* Done with control read data stage. */				UDCDBG ("control read data stage complete");				/* deselect EP0 TX FIFO */				outw (UDC_EP_Dir, UDC_EP_NUM);				/* select EP0 RX FIFO to prepare for control				 * read status stage.				 */				outw (UDC_EP_Sel, UDC_EP_NUM);				/* clear the EP0 RX FIFO */				outw (UDC_Clr_EP, UDC_CTRL);				/* enable the EP0 RX FIFO */				outw (UDC_Set_FIFO_En, UDC_CTRL);				/* deselect the EP0 RX FIFO */				outw (0, UDC_EP_NUM);			} else {				/* We still have another packet of data to send				 * in this control read data stage or else we				 * need a zero-length terminating packet.				 */				UDCDBG ("ACK control read data stage packet");				omap1510_write_noniso_tx_fifo (endpoint);				/* enable the EP0 tx FIFO to start transmission */				outw (UDC_Set_FIFO_En, UDC_CTRL);				/* deselect EP0 TX FIFO */				outw (UDC_EP_Dir, UDC_EP_NUM);			}		}	} else if (status & UDC_STALL) {		UDCDBG ("EP0 stall during TX");		/* deselect EP0 TX FIFO */		outw (UDC_EP_Dir, UDC_EP_NUM);	} else {		/* deselect EP0 TX FIFO */		outw (UDC_EP_Dir, UDC_EP_NUM);	}}/* Handle RX transaction on non-ISO endpoint. * This function implements TRM Figure 14-27. * The ep argument is a physical endpoint number for a non-ISO OUT endpoint * in the range 1 to 15. */static void omap1510_udc_epn_rx (int ep){	unsigned short status;	/* Check endpoint status */	status = inw (UDC_STAT_FLG);	if (status & UDC_ACK) {		int nbytes;		struct usb_endpoint_instance *endpoint =			omap1510_find_ep (ep);		nbytes = omap1510_read_noniso_rx_fifo (endpoint);		usbd_rcv_complete (endpoint, nbytes, 0);		/* enable rx FIFO to prepare for next packet */		outw (UDC_Set_FIFO_En, UDC_CTRL);	} else if (status & UDC_STALL) {		UDCDBGA ("STALL on RX endpoint %d", ep);	} else if (status & UDC_NAK) {		UDCDBGA ("NAK on RX ep %d", ep);	} else {		serial_printf ("omap-bi: RX on ep %d with status %x", ep,			       status);	}}/* Handle TX transaction on non-ISO endpoint. * This function implements TRM Figure 14-29. * The ep argument is a physical endpoint number for a non-ISO IN endpoint * in the range 16 to 30. */static void omap1510_udc_epn_tx (int ep){	unsigned short status;	/*serial_printf("omap1510_udc_epn_tx( %x )\n",ep); */	/* Check endpoint status */	status = inw (UDC_STAT_FLG);	if (status & UDC_ACK) {		struct usb_endpoint_instance *endpoint =			omap1510_find_ep (ep);		/* We need to transmit a terminating zero-length packet now if		 * we have sent all of the data in this URB and the transfer		 * size was an exact multiple of the packet size.		 */		if (endpoint->tx_urb		    && (endpoint->last == endpoint->tx_packetSize)		    && (endpoint->tx_urb->actual_length - endpoint->sent -			endpoint->last == 0)) {			/* Prepare to transmit a zero-length packet. */			endpoint->sent += endpoint->last;			/* write 0 bytes of data to FIFO */			omap1510_write_noniso_tx_fifo (endpoint);			/* enable tx FIFO to start transmission */			outw (UDC_Set_FIFO_En, UDC_CTRL);		} else if (endpoint->tx_urb			   && endpoint->tx_urb->actual_length) {			/* retire the data that was just sent */			usbd_tx_complete (endpoint);			/* Check to see if we have more data ready to transmit			 * now.			 */			if (endpoint->tx_urb			    && endpoint->tx_urb->actual_length) {				/* write data to FIFO */				omap1510_write_noniso_tx_fifo (endpoint);				/* enable tx FIFO to start transmission */				outw (UDC_Set_FIFO_En, UDC_CTRL);			}		}	} else if (status & UDC_STALL) {		UDCDBGA ("STALL on TX endpoint %d", ep);	} else if (status & UDC_NAK) {		UDCDBGA ("NAK on TX endpoint %d", ep);	} else {		/*serial_printf("omap-bi: TX on ep %d with status %x\n", ep, status); */	}}/*-------------------------------------------------------------------------------*//* Handle general USB interrupts and dispatch according to type. * This function implements TRM Figure 14-13. */void omap1510_udc_irq (void){	u16 irq_src = inw (UDC_IRQ_SRC);	int valid_irq = 0;	if (!(irq_src & ~UDC_SOF_Flg))	/* ignore SOF interrupts ) */		return;	UDCDBGA ("< IRQ #%d start >- %x", udc_interrupts, irq_src);	/*serial_printf("< IRQ #%d start >- %x\n", udc_interrupts, irq_src); */	if (irq_src & UDC_DS_Chg) {		/* Device status changed */		omap1510_udc_state_changed ();		valid_irq++;	}	if (irq_src & UDC_EP0_RX) {		/* Endpoint 0 receive */		outw (UDC_EP0_RX, UDC_IRQ_SRC); /* ack interrupt */		omap1510_udc_ep0_rx (udc_device->bus->endpoint_array + 0);		valid_irq++;	}	if (irq_src & UDC_EP0_TX) {		/* Endpoint 0 transmit */		outw (UDC_EP0_TX, UDC_IRQ_SRC); /* ack interrupt */		omap1510_udc_ep0_tx (udc_device->bus->endpoint_array + 0);		valid_irq++;	}	if (irq_src & UDC_Setup) {		/* Device setup */		omap1510_udc_setup (udc_device->bus->endpoint_array + 0);		valid_irq++;	}	/*if (!valid_irq) */	/*	serial_printf("unknown interrupt, IRQ_SRC %.4x\n", irq_src); */	UDCDBGA ("< IRQ #%d end >", udc_interrupts);	udc_interrupts++;}/* This function implements TRM Figure 14-26. */void omap1510_udc_noniso_irq (void){	unsigned short epnum;	unsigned short irq_src = inw (UDC_IRQ_SRC);	int valid_irq = 0;	if (!(irq_src & (UDC_EPn_RX | UDC_EPn_TX)))		return;	UDCDBGA ("non-ISO IRQ, IRQ_SRC %x", inw (UDC_IRQ_SRC));	if (irq_src & UDC_EPn_RX) {	/* Endpoint N OUT transaction */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕亚洲一区二区va在线| 一区二区三区在线影院| 成人免费在线播放视频| 日本亚洲视频在线| 99久久精品国产一区二区三区| 91精品国产高清一区二区三区蜜臀| 中文字幕不卡的av| 精品午夜一区二区三区在线观看| 日本韩国一区二区三区| 欧美激情在线观看视频免费| 蜜臀久久久久久久| 91福利视频久久久久| 国产精品丝袜久久久久久app| 日韩 欧美一区二区三区| 91久久精品一区二区二区| 日本一区二区不卡视频| 国内不卡的二区三区中文字幕| 欧美日韩不卡一区| 青草国产精品久久久久久| 久久精品在线观看| 无码av免费一区二区三区试看| 成人在线视频一区二区| 精品乱人伦小说| 五月天一区二区三区| 色综合av在线| 亚洲日本免费电影| 成人成人成人在线视频| 国产欧美一区二区精品仙草咪| 蜜桃av一区二区| 欧美日韩国产美| 亚洲一区二区三区四区中文字幕| 91久久精品午夜一区二区| 国产精品国产三级国产| fc2成人免费人成在线观看播放| 国产视频在线观看一区二区三区| 国产乱码精品一区二区三区五月婷| 日韩欧美国产系列| 国产一区二区三区免费看 | 亚洲综合免费观看高清完整版在线 | 91丝袜呻吟高潮美腿白嫩在线观看| 精品少妇一区二区三区视频免付费| 蜜桃一区二区三区四区| 精品国产一区二区精华| 国内成人自拍视频| 久久久精品免费网站| 成人国产电影网| 亚洲欧美福利一区二区| 日本精品一区二区三区高清| 亚洲五码中文字幕| 欧美日韩精品一二三区| 麻豆精品视频在线观看| 精品少妇一区二区三区日产乱码| 国产一区二区三区精品欧美日韩一区二区三区 | 一区二区三区不卡在线观看| 色88888久久久久久影院野外| 亚洲欧美精品午睡沙发| 欧美性做爰猛烈叫床潮| 日韩国产高清在线| 久久亚洲精品小早川怜子| 成人伦理片在线| 亚洲一区二区三区在线| 欧美大片在线观看| 成人免费黄色大片| 亚洲午夜免费视频| 日韩欧美你懂的| jvid福利写真一区二区三区| 亚洲6080在线| 国产亚洲精品bt天堂精选| 91蜜桃婷婷狠狠久久综合9色| 国产一区二区在线视频| 91精品免费在线| 国产一区二区三区日韩| 1000部国产精品成人观看| 欧美日韩亚洲国产综合| 精品中文字幕一区二区小辣椒| 国产人伦精品一区二区| 91成人在线精品| 久久黄色级2电影| 最新国产の精品合集bt伙计| 欧美丰满高潮xxxx喷水动漫| 国产高清久久久| 一区二区成人在线视频| 欧美成人a视频| 在线播放视频一区| 久久av资源网| 一区二区三区小说| 久久亚洲精华国产精华液| 99久久免费国产| 久久国产精品色婷婷| 一区二区三区国产| 26uuu精品一区二区三区四区在线| 色悠悠久久综合| 国内一区二区在线| 久久精品视频免费观看| 欧美日韩三级一区| av一区二区三区黑人| 国产一区二区三区高清播放| 午夜精品一区二区三区三上悠亚| 亚洲国产电影在线观看| 久久久国产综合精品女国产盗摄| 欧美日韩激情一区二区三区| 99久久精品免费观看| 国产精品一级片在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲一区二区三区自拍| 亚洲女性喷水在线观看一区| 国产精品久久久久影院色老大 | 日韩精品1区2区3区| 亚洲一区视频在线| 伊人一区二区三区| 亚洲伦理在线精品| 中文字幕综合网| 中文字幕一区二区三区在线不卡| 国产亚洲精品福利| 国产午夜精品一区二区三区四区| 精品美女一区二区三区| 精品欧美一区二区久久| 欧美r级电影在线观看| 欧美大尺度电影在线| 欧美电影免费观看高清完整版在线| 3751色影院一区二区三区| 欧美日韩精品欧美日韩精品一综合| 91九色最新地址| 欧美性猛交xxxxxxxx| 欧美在线观看一区二区| 欧美三级电影网| 欧美一区二区三区的| 欧美成人vps| 国产精品美女一区二区三区| 国产精品久久久久久久蜜臀 | 国产成人精品免费看| 国产iv一区二区三区| jizz一区二区| 欧美日韩综合不卡| 日韩一区二区免费电影| 久久综合视频网| 中文字幕一区二区三区蜜月| 亚洲精品高清在线观看| 五月天久久比比资源色| 精品在线你懂的| 99久久精品免费| 欧美一区二区福利在线| 国产蜜臀av在线一区二区三区| 亚洲色图欧美偷拍| 日韩黄色在线观看| 国产凹凸在线观看一区二区| 在线亚洲免费视频| 精品久久久久99| 亚洲欧美一区二区久久 | 国产成人精品网址| 欧美午夜免费电影| 久久婷婷国产综合精品青草| 亚洲色大成网站www久久九九| 亚洲成人一区在线| 国产91丝袜在线播放九色| 日本精品裸体写真集在线观看| 日韩女优毛片在线| 中文字幕一区二区5566日韩| 中文字幕的久久| 日韩欧美视频在线| 欧美激情综合在线| 亚洲一区二区三区三| 精品一区二区三区在线观看| 97se狠狠狠综合亚洲狠狠| 日韩一区二区三区免费看| 国产欧美中文在线| 亚洲6080在线| 91视频精品在这里| 精品国产制服丝袜高跟| 悠悠色在线精品| 成人av免费在线播放| 日韩精品资源二区在线| 亚洲激情男女视频| 国产一区美女在线| 欧美日韩一本到| 国产精品第五页| 国产精品91一区二区| 欧美精品视频www在线观看| 亚洲视频你懂的| 九一久久久久久| 777a∨成人精品桃花网| 亚洲自拍偷拍麻豆| 91在线国内视频| 国产精品青草综合久久久久99| 久久综合综合久久综合| 911精品产国品一二三产区| 亚洲蜜臀av乱码久久精品| 成人av免费在线播放| 国产免费成人在线视频| 国产成人av自拍| 精品国产麻豆免费人成网站| 午夜激情一区二区三区| 欧美丝袜自拍制服另类| 亚洲精品成人在线| 成人美女视频在线观看18| 国产亚洲欧美在线| 丁香婷婷深情五月亚洲| 久久久不卡网国产精品二区| 寂寞少妇一区二区三区| 久久奇米777|