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

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

?? usbdcore_omap1510.c

?? UBOOT 源碼
?? 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一区二区三区免费野_久草精品视频
www激情久久| 欧美久久久久免费| 91在线精品一区二区三区| 欧美色视频在线观看| 欧美日韩成人综合| 成人黄色小视频| 国产精品久久久久婷婷二区次| 亚洲国产一区二区在线播放| 日本二三区不卡| 亚洲午夜免费电影| 欧美群妇大交群中文字幕| 亚洲福中文字幕伊人影院| 成人免费视频国产在线观看| 在线免费av一区| 亚洲二区在线观看| 欧美性一二三区| 日韩电影在线免费观看| 91精品久久久久久蜜臀| 狠狠色丁香婷综合久久| 久久先锋资源网| 91女神在线视频| 亚洲不卡一区二区三区| 久久久噜噜噜久久人人看 | 亚洲欧洲99久久| 欧美性一二三区| 国产一区激情在线| 亚洲欧美偷拍卡通变态| 色婷婷精品久久二区二区蜜臀av| 天天色综合天天| 久久精品网站免费观看| 在线日韩国产精品| 国产一区二区三区综合| 亚洲福利电影网| 国产清纯白嫩初高生在线观看91| 91热门视频在线观看| 日韩不卡免费视频| 亚洲欧美电影院| 精品国产一区二区三区久久影院 | 91激情五月电影| 国产精品77777竹菊影视小说| 视频一区二区中文字幕| 国产网站一区二区| 欧美本精品男人aⅴ天堂| 日本高清无吗v一区| www.成人网.com| 国产suv一区二区三区88区| 国产在线视频不卡二| 精品国产91久久久久久久妲己| 成人免费福利片| 狠狠色丁香久久婷婷综| 日本成人在线电影网| 天天爽夜夜爽夜夜爽精品视频| 一级日本不卡的影视| 一区二区三区在线视频观看58 | 亚洲国产综合在线| 一区二区免费视频| 亚洲一区二区三区小说| 一区二区在线电影| 亚洲一区二区三区四区五区中文 | 久久久精品国产免大香伊| 欧美α欧美αv大片| 精品免费视频.| 久久免费午夜影院| 精品88久久久久88久久久 | 91在线高清观看| 欧美性感一类影片在线播放| 欧美性xxxxxxxx| 日韩女优电影在线观看| 欧美国产激情一区二区三区蜜月| 国产免费成人在线视频| 亚洲永久精品国产| 麻豆freexxxx性91精品| 久久99精品久久久久久动态图 | 欧美性猛交xxxx乱大交退制版| 欧美日韩一二区| 欧美r级在线观看| 国产精品久久久久久久久搜平片 | 国产精品久久夜| 亚洲一区二区欧美日韩| 日韩激情av在线| 国产91精品精华液一区二区三区 | 91小视频免费观看| 国产精品资源站在线| 欧美日韩在线观看一区二区 | 精品视频一区三区九区| 久久午夜羞羞影院免费观看| 亚洲四区在线观看| 精品一区二区三区在线播放 | 国产偷国产偷精品高清尤物| 一级中文字幕一区二区| 成人影视亚洲图片在线| 欧美日韩情趣电影| 在线观看www91| 国产丝袜美腿一区二区三区| 国产精品国产成人国产三级| 亚洲电影在线播放| 成年人网站91| 在线播放中文字幕一区| 国产精品嫩草99a| 亚洲一区视频在线观看视频| 黄色资源网久久资源365| 欧美女孩性生活视频| 亚洲乱码中文字幕| 国内精品伊人久久久久av一坑| 国产又粗又猛又爽又黄91精品| 欧美亚日韩国产aⅴ精品中极品| 日本一区二区三级电影在线观看| 毛片一区二区三区| 日本 国产 欧美色综合| 国产精品一区在线观看乱码| 欧美成人aa大片| 日本亚洲欧美天堂免费| 在线不卡的av| 免费xxxx性欧美18vr| 欧美日韩大陆在线| 五月天中文字幕一区二区| 欧美特级限制片免费在线观看| 久久久久久久久久久久久久久99 | 欧美一区二区三区不卡| 国产福利电影一区二区三区| 国产精品免费人成网站| 一本大道av伊人久久综合| 亚洲国产精品天堂| 日韩一卡二卡三卡四卡| 国产精品中文有码| 亚洲激情图片小说视频| 日韩色视频在线观看| 91热门视频在线观看| 蜜臀国产一区二区三区在线播放| 欧美变态口味重另类| 成人av综合在线| 亚洲午夜久久久| 久久久久久亚洲综合影院红桃| 国产一区二区三区四区五区美女| 国产精品久久久久久亚洲毛片| 欧美视频一区二区三区在线观看| 日本vs亚洲vs韩国一区三区二区 | 亚洲成人免费视| 欧美精品一区二区久久久| 91久久精品网| 国产资源在线一区| 中文字幕第一区第二区| 欧美视频在线观看一区| 99re热这里只有精品视频| 亚洲香肠在线观看| 日韩三级精品电影久久久| 91免费观看视频| 久久99蜜桃精品| 日欧美一区二区| 亚洲精选一二三| 日本韩国视频一区二区| 天天综合天天做天天综合| 1区2区3区国产精品| 中日韩av电影| 国产日产欧产精品推荐色| 欧美成人精精品一区二区频| 欧美电视剧在线看免费| 制服丝袜日韩国产| 欧美亚洲国产bt| 欧美性大战久久久久久久蜜臀 | 日韩精品色哟哟| 蜜桃av一区二区| 理论片日本一区| 精品制服美女丁香| 九色综合狠狠综合久久| 国产黑丝在线一区二区三区| 精彩视频一区二区| 国产福利视频一区二区三区| 成人免费毛片高清视频| eeuss鲁一区二区三区| av电影天堂一区二区在线观看| 日本怡春院一区二区| 国产精品亚洲专一区二区三区| 国产一区二区三区精品视频| 国产丶欧美丶日本不卡视频| 不卡一区二区中文字幕| 欧美另类z0zxhd电影| 日韩欧美在线网站| 国产精品乱码一区二三区小蝌蚪| 一区二区三区在线观看网站| 日韩二区三区四区| 99久久国产免费看| 日韩欧美区一区二| 一区二区三区中文字幕| 亚洲一区在线观看免费观看电影高清| 日韩精品视频网| 一本一道久久a久久精品综合蜜臀| 波多野洁衣一区| 亚洲精品在线网站| 亚洲午夜电影在线观看| 粉嫩一区二区三区在线看| 欧美日韩成人激情| 亚洲视频在线一区二区| 国产一区久久久| 日韩美女在线视频| 亚洲国产视频一区二区| av一区二区三区四区| 国产清纯白嫩初高生在线观看91 | 亚洲人成7777| 麻豆成人91精品二区三区|