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

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

?? dwc_otg_hcd_intr.c

?? host usb 主設備程序 支持sd卡 mouse keyboard 的最單單的驅動程序 gcc編譯
?? C
?? 第 1 頁 / 共 4 頁
字號:
	hctsiz.d32 = dwc_read_reg32(&_hc_regs->hctsiz);	if (!_hc->ep_is_in || hctsiz.b.pktcnt == 0) {		/* Core halts channel in these cases. */		release_channel(_hcd, _hc, _qtd, _halt_status);	} else {		/* Flush any outstanding requests from the Tx queue. */		halt_channel(_hcd, _hc, _qtd, _halt_status);	}}/** * Handles a host channel Transfer Complete interrupt. This handler may be * called in either DMA mode or Slave mode. */static int32_t handle_hc_xfercomp_intr(dwc_otg_hcd_t * _hcd,				       dwc_hc_t * _hc,				       dwc_otg_hc_regs_t * _hc_regs, dwc_otg_qtd_t * _qtd){	int urb_xfer_done;	dwc_otg_halt_status_e halt_status = DWC_OTG_HC_XFER_COMPLETE;	struct urb *urb = _qtd->urb;	int pipe_type = usb_pipetype(urb->pipe);	DWC_DEBUGPL(DBG_HCD, "--Host Channel %d Interrupt: " "Transfer Complete--\n", _hc->hc_num);	/*	 * Handle xfer complete on CSPLIT.	 */	if (_hc->qh->do_split) {		_qtd->complete_split = 0;	}	/* Update the QTD and URB states. */	switch (pipe_type) {	case PIPE_CONTROL:		switch (_qtd->control_phase) {		case DWC_OTG_CONTROL_SETUP:			if (urb->transfer_buffer_length > 0) {				_qtd->control_phase = DWC_OTG_CONTROL_DATA;			} else {				_qtd->control_phase = DWC_OTG_CONTROL_STATUS;			}			DWC_DEBUGPL(DBG_HCDV, "  Control setup transaction done\n");			halt_status = DWC_OTG_HC_XFER_COMPLETE;			break;		case DWC_OTG_CONTROL_DATA:{				urb_xfer_done =					update_urb_state_xfer_comp(_hc, _hc_regs, urb, _qtd);				if (urb_xfer_done) {					_qtd->control_phase = DWC_OTG_CONTROL_STATUS;					DWC_DEBUGPL(DBG_HCDV, "  Control data transfer done\n");				} else {					save_data_toggle(_hc, _hc_regs, _qtd);				}				halt_status = DWC_OTG_HC_XFER_COMPLETE;				break;			}		case DWC_OTG_CONTROL_STATUS:			DWC_DEBUGPL(DBG_HCDV, "  Control transfer complete\n");			if (urb->status == -EINPROGRESS) {				urb->status = 0;			}			dwc_otg_hcd_complete_urb(_hcd, urb, urb->status);			halt_status = DWC_OTG_HC_XFER_URB_COMPLETE;			break;		}		complete_non_periodic_xfer(_hcd, _hc, _hc_regs, _qtd, halt_status);		_hcd->core_if->xfr_done[0]++;		break;	case PIPE_BULK:		DWC_DEBUGPL(DBG_HCDV, "  Bulk transfer complete\n");		urb_xfer_done = update_urb_state_xfer_comp(_hc, _hc_regs, urb, _qtd);		if (urb_xfer_done) {			dwc_otg_hcd_complete_urb(_hcd, urb, urb->status);			halt_status = DWC_OTG_HC_XFER_URB_COMPLETE;		} else {			halt_status = DWC_OTG_HC_XFER_COMPLETE;		}		save_data_toggle(_hc, _hc_regs, _qtd);		complete_non_periodic_xfer(_hcd, _hc, _hc_regs, _qtd, halt_status);		_hcd->core_if->xfr_done[1]++;		break;	case PIPE_INTERRUPT:		DWC_DEBUGPL(DBG_HCDV, "  Interrupt transfer complete\n");		update_urb_state_xfer_comp(_hc, _hc_regs, urb, _qtd);		/*		 * Interrupt URB is done on the first transfer complete		 * interrupt.		 */		dwc_otg_hcd_complete_urb(_hcd, urb, urb->status);		save_data_toggle(_hc, _hc_regs, _qtd);		complete_periodic_xfer(_hcd, _hc, _hc_regs, _qtd, DWC_OTG_HC_XFER_URB_COMPLETE);		_hcd->core_if->xfr_done[2]++;		break;	case PIPE_ISOCHRONOUS:		DWC_DEBUGPL(DBG_HCDV, "  Isochronous transfer complete\n");		if (_qtd->isoc_split_pos == DWC_HCSPLIT_XACTPOS_ALL) {			halt_status = update_isoc_urb_state(_hcd, _hc, _hc_regs, _qtd,							    DWC_OTG_HC_XFER_COMPLETE);		}		complete_periodic_xfer(_hcd, _hc, _hc_regs, _qtd, halt_status);		_hcd->core_if->xfr_done[3]++;		break;	}	disable_hc_int(_hc_regs, xfercompl);	return 1;}/** * Handles a host channel STALL interrupt. This handler may be called in * either DMA mode or Slave mode. */static int32_t handle_hc_stall_intr(dwc_otg_hcd_t * _hcd,				    dwc_hc_t * _hc,				    dwc_otg_hc_regs_t * _hc_regs, dwc_otg_qtd_t * _qtd){	struct urb *urb = _qtd->urb;	int pipe_type = usb_pipetype(urb->pipe);	DWC_DEBUGPL(DBG_HCD, "--Host Channel %d Interrupt: " "STALL Received--\n", _hc->hc_num);	if (pipe_type == PIPE_CONTROL) {		dwc_otg_hcd_complete_urb(_hcd, _qtd->urb, -EPIPE);	}	if (pipe_type == PIPE_BULK || pipe_type == PIPE_INTERRUPT) {		dwc_otg_hcd_complete_urb(_hcd, _qtd->urb, -EPIPE);		/*		 * USB protocol requires resetting the data toggle for bulk		 * and interrupt endpoints when a CLEAR_FEATURE(ENDPOINT_HALT)		 * setup command is issued to the endpoint. Anticipate the		 * CLEAR_FEATURE command since a STALL has occurred and reset		 * the data toggle now.		 */		_hc->qh->data_toggle = 0;	}	halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_STALL);	disable_hc_int(_hc_regs, stall);	return 1;}/* * Updates the state of the URB when a transfer has been stopped due to an * abnormal condition before the transfer completes. Modifies the * actual_length field of the URB to reflect the number of bytes that have * actually been transferred via the host channel. */static void update_urb_state_xfer_intr(dwc_hc_t * _hc,				       dwc_otg_hc_regs_t * _hc_regs,				       struct urb *_urb,				       dwc_otg_qtd_t * _qtd, dwc_otg_halt_status_e _halt_status){	uint32_t bytes_transferred = get_actual_xfer_length(_hc, _hc_regs, _qtd,							    _halt_status, NULL);	_urb->actual_length += bytes_transferred;#ifdef DEBUG	{		hctsiz_data_t hctsiz;		hctsiz.d32 = dwc_read_reg32(&_hc_regs->hctsiz);		DWC_DEBUGPL(DBG_HCDV, "DWC_otg: %s: %s, channel %d\n",			    __func__, (_hc->ep_is_in ? "IN" : "OUT"), _hc->hc_num);		DWC_DEBUGPL(DBG_HCDV, "  _hc->start_pkt_count %d\n", _hc->start_pkt_count);		DWC_DEBUGPL(DBG_HCDV, "  hctsiz.pktcnt %d\n", hctsiz.b.pktcnt);		DWC_DEBUGPL(DBG_HCDV, "  _hc->max_packet %d\n", _hc->max_packet);		DWC_DEBUGPL(DBG_HCDV, "  bytes_transferred %d\n", bytes_transferred);		DWC_DEBUGPL(DBG_HCDV, "  _urb->actual_length %d\n", _urb->actual_length);		DWC_DEBUGPL(DBG_HCDV, "  _urb->transfer_buffer_length %d\n",			    _urb->transfer_buffer_length);	}#endif}/** * Handles a host channel NAK interrupt. This handler may be called in either * DMA mode or Slave mode. */static int32_t handle_hc_nak_intr(dwc_otg_hcd_t * _hcd,				  dwc_hc_t * _hc,				  dwc_otg_hc_regs_t * _hc_regs, dwc_otg_qtd_t * _qtd){	DWC_DEBUGPL(DBG_HCD, "--Host Channel %d Interrupt: " "NAK Received--\n", _hc->hc_num);	/*	 * Handle NAK for IN/OUT SSPLIT/CSPLIT transfers, bulk, control, and	 * interrupt.  Re-start the SSPLIT transfer.	 */	if (_hc->do_split) {		if (_hc->complete_split) {			_qtd->error_count = 0;		}		_qtd->complete_split = 0;		halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_NAK);		goto handle_nak_done;	}	switch (usb_pipetype(_qtd->urb->pipe)) {	case PIPE_CONTROL:	case PIPE_BULK:		if (_hcd->core_if->dma_enable && _hc->ep_is_in) {			/*			 * NAK interrupts are enabled on bulk/control IN			 * transfers in DMA mode for the sole purpose of			 * resetting the error count after a transaction error			 * occurs. The core will continue transferring data.			 */			_qtd->error_count = 0;			goto handle_nak_done;		}		/*		 * NAK interrupts normally occur during OUT transfers in DMA		 * or Slave mode. For IN transfers, more requests will be		 * queued as request queue space is available.		 */		_qtd->error_count = 0;		if (!_hc->qh->ping_state) {			update_urb_state_xfer_intr(_hc, _hc_regs, _qtd->urb,						   _qtd, DWC_OTG_HC_XFER_NAK);			save_data_toggle(_hc, _hc_regs, _qtd);			if (_qtd->urb->dev->speed == USB_SPEED_HIGH) {				_hc->qh->ping_state = 1;			}		}		/*		 * Halt the channel so the transfer can be re-started from		 * the appropriate point or the PING protocol will		 * start/continue.		 */		halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_NAK);		break;	case PIPE_INTERRUPT:		_qtd->error_count = 0;		halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_NAK);		break;	case PIPE_ISOCHRONOUS:		/* Should never get called for isochronous transfers. */		BUG();		break;	}      handle_nak_done:	disable_hc_int(_hc_regs, nak);	return 1;}/** * Handles a host channel ACK interrupt. This interrupt is enabled when * performing the PING protocol in Slave mode, when errors occur during * either Slave mode or DMA mode, and during Start Split transactions. */static int32_t handle_hc_ack_intr(dwc_otg_hcd_t * _hcd,				  dwc_hc_t * _hc,				  dwc_otg_hc_regs_t * _hc_regs, dwc_otg_qtd_t * _qtd){	DWC_DEBUGPL(DBG_HCD, "--Host Channel %d Interrupt: " "ACK Received--\n", _hc->hc_num);	if (_hc->do_split) {		/*		 * Handle ACK on SSPLIT.		 * ACK should not occur in CSPLIT.		 */		if ((!_hc->ep_is_in) && (_hc->data_pid_start != DWC_OTG_HC_PID_SETUP)) {			_qtd->ssplit_out_xfer_count = _hc->xfer_len;		}		if (!(_hc->ep_type == DWC_OTG_EP_TYPE_ISOC && !_hc->ep_is_in)) {			/* Don't need complete for isochronous out transfers. */			_qtd->complete_split = 1;		}		/* ISOC OUT */		if ((_hc->ep_type == DWC_OTG_EP_TYPE_ISOC) && !_hc->ep_is_in) {			switch (_hc->xact_pos) {			case DWC_HCSPLIT_XACTPOS_ALL:				break;			case DWC_HCSPLIT_XACTPOS_END:				_qtd->isoc_split_pos = DWC_HCSPLIT_XACTPOS_ALL;				_qtd->isoc_split_offset = 0;				break;			case DWC_HCSPLIT_XACTPOS_BEGIN:			case DWC_HCSPLIT_XACTPOS_MID:				/*				 * For BEGIN or MID, calculate the length for				 * the next microframe to determine the correct				 * SSPLIT token, either MID or END.				 */				do {					struct usb_iso_packet_descriptor *frame_desc;					frame_desc =						&_qtd->urb->iso_frame_desc[_qtd->isoc_frame_index];					_qtd->isoc_split_offset += 188;					if ((frame_desc->length - _qtd->isoc_split_offset) <= 188) {						_qtd->isoc_split_pos = DWC_HCSPLIT_XACTPOS_END;					} else {						_qtd->isoc_split_pos = DWC_HCSPLIT_XACTPOS_MID;					}				} while (0);				break;			}		} else {			halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_ACK);		}	} else {		_qtd->error_count = 0;		if (_hc->qh->ping_state) {			_hc->qh->ping_state = 0;			/*			 * Halt the channel so the transfer can be re-started			 * from the appropriate point. This only happens in			 * Slave mode. In DMA mode, the ping_state is cleared			 * when the transfer is started because the core			 * automatically executes the PING, then the transfer.			 */			halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_ACK);		}	}	/*	 * If the ACK occurred when _not_ in the PING state, let the channel	 * continue transferring data after clearing the error count.	 */	disable_hc_int(_hc_regs, ack);	return 1;}/** * Handles a host channel NYET interrupt. This interrupt should only occur on * Bulk and Control OUT endpoints and for complete split transactions. If a * NYET occurs at the same time as a Transfer Complete interrupt, it is * handled in the xfercomp interrupt handler, not here. This handler may be * called in either DMA mode or Slave mode. */static int32_t handle_hc_nyet_intr(dwc_otg_hcd_t * _hcd,				   dwc_hc_t * _hc,				   dwc_otg_hc_regs_t * _hc_regs, dwc_otg_qtd_t * _qtd){	DWC_DEBUGPL(DBG_HCD, "--Host Channel %d Interrupt: " "NYET Received--\n", _hc->hc_num);	/*	 * NYET on CSPLIT	 * re-do the CSPLIT immediately on non-periodic	 */	if ((_hc->do_split) && (_hc->complete_split)) {		if ((_hc->ep_type == DWC_OTG_EP_TYPE_INTR) ||		    (_hc->ep_type == DWC_OTG_EP_TYPE_ISOC)) {			int frnum = dwc_otg_hcd_get_frame_number(dwc_otg_hcd_to_hcd(_hcd));			if (dwc_full_frame_num(frnum) != dwc_full_frame_num(_hc->qh->sched_frame)) {				/*				 * No longer in the same full speed frame.				 * Treat this as a transaction error.				 */#if 0				/** @todo Fix system performance so this can				 * be treated as an error. Right now complete				 * splits cannot be scheduled precisely enough				 * due to other system activity, so this error				 * occurs regularly in Slave mode.				 */				_qtd->error_count++;#endif				_qtd->complete_split = 0;				halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_XACT_ERR);				/** @todo add support for isoc release */				goto handle_nyet_done;			}		}		halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_NYET);		goto handle_nyet_done;	}	_hc->qh->ping_state = 1;	_qtd->error_count = 0;	update_urb_state_xfer_intr(_hc, _hc_regs, _qtd->urb, _qtd, DWC_OTG_HC_XFER_NYET);	save_data_toggle(_hc, _hc_regs, _qtd);	/*	 * Halt the channel and re-start the transfer so the PING	 * protocol will start.	 */	halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_NYET);      handle_nyet_done:	disable_hc_int(_hc_regs, nyet);	return 1;}/** * Handles a host channel babble interrupt. This handler may be called in * either DMA mode or Slave mode. */static int32_t handle_hc_babble_intr(dwc_otg_hcd_t * _hcd,				     dwc_hc_t * _hc,				     dwc_otg_hc_regs_t * _hc_regs, dwc_otg_qtd_t * _qtd){	DWC_DEBUGPL(DBG_HCD, "--Host Channel %d Interrupt: " "Babble Error--\n", _hc->hc_num);	if (_hc->ep_type != DWC_OTG_EP_TYPE_ISOC) {		dwc_otg_hcd_complete_urb(_hcd, _qtd->urb, -EOVERFLOW);		halt_channel(_hcd, _hc, _qtd, DWC_OTG_HC_XFER_BABBLE_ERR);	} else {		dwc_otg_halt_status_e halt_status;		halt_status = update_isoc_urb_state(_hcd, _hc, _hc_regs, _qtd,						    DWC_OTG_HC_XFER_BABBLE_ERR);		halt_channel(_hcd, _hc, _qtd, halt_status);	}	disable_hc_int(_hc_regs, bblerr);	return 1;}/** * Handles a host channel AHB error interrupt. This handler is only called in * DMA mode. */static int32_t handle_hc_ahberr_intr(dwc_otg_hcd_t * _hcd,				     dwc_hc_t * _hc,				     dwc_otg_hc_regs_t * _hc_regs, dwc_otg_qtd_t * _qtd){	hcchar_data_t hcchar;	hcsplt_data_t hcsplt;	hctsiz_data_t hctsiz;	uint32_t hcdma;	struct urb *urb = _qtd->urb;	DWC_DEBUGPL(DBG_HCD, "--Host Channel %d Interrupt: " "AHB Error--\n", _hc->hc_num);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合在线| 欧美一区二区观看视频| 高清久久久久久| 国产九九视频一区二区三区| 久久国产精品一区二区| 麻豆成人在线观看| 九色综合狠狠综合久久| 韩国女主播成人在线观看| 国产精品一区二区久久不卡| 国产精品综合二区| a亚洲天堂av| 色天天综合久久久久综合片| 欧美午夜不卡视频| 538在线一区二区精品国产| 欧美一级黄色录像| 国产清纯美女被跳蛋高潮一区二区久久w | 美女视频黄 久久| 久久99在线观看| 国产·精品毛片| 91福利在线导航| 欧美日韩免费观看一区二区三区| 在线播放国产精品二区一二区四区| 777亚洲妇女| 久久一区二区视频| 亚洲视频在线一区| 日韩1区2区3区| 国产一区视频导航| 91偷拍与自偷拍精品| 欧美群妇大交群的观看方式| 精品成人佐山爱一区二区| 国产欧美日韩久久| 一级中文字幕一区二区| 久久精品久久99精品久久| 成人开心网精品视频| 欧美性色黄大片| 精品福利一区二区三区免费视频| 中文幕一区二区三区久久蜜桃| 一区二区三区中文字幕电影 | 亚洲成人www| 六月丁香婷婷色狠狠久久| www.色精品| 欧美美女一区二区三区| 久久这里只有精品6| 一区二区三区在线观看动漫| 男人的j进女人的j一区| 99免费精品视频| 欧美一级欧美三级| 国产精品午夜久久| 日本中文字幕一区二区有限公司| 国产福利一区在线观看| 欧美无砖专区一中文字| 亚洲精品在线免费观看视频| 亚洲情趣在线观看| 狠狠狠色丁香婷婷综合激情| 色先锋久久av资源部| 精品国产免费视频| 亚洲成人精品一区| 成人免费三级在线| 欧美mv日韩mv国产网站| 亚洲一区电影777| 成人午夜激情影院| 日韩三级av在线播放| 亚洲精品五月天| 国产精品91xxx| 欧美日韩成人在线| 亚洲四区在线观看| 国产69精品久久久久毛片 | 一区二区国产视频| 国产成人精品www牛牛影视| 欧美中文字幕亚洲一区二区va在线| 精品国产一区二区三区久久影院 | www.99精品| 精品国产乱码久久久久久浪潮 | 国产精品99久久久久久久女警| 欧美日韩一本到| 国产精品色婷婷久久58| 国产最新精品免费| 日韩欧美激情四射| 亚洲男人的天堂一区二区| 亚洲影院免费观看| 国产成人免费在线观看不卡| 这里是久久伊人| 亚洲激情成人在线| caoporen国产精品视频| 欧美激情自拍偷拍| 国内精品视频一区二区三区八戒| 777亚洲妇女| 亚洲成av人片在www色猫咪| 91麻豆国产福利精品| 国产精品国产三级国产专播品爱网| 精品系列免费在线观看| 欧美一级爆毛片| 天天av天天翘天天综合网| 色菇凉天天综合网| 亚洲精品va在线观看| 91社区在线播放| 中文字幕一区二区三区在线播放| 国产乱码精品一品二品| 久久久久久久久99精品| 国内精品国产三级国产a久久| 伊人夜夜躁av伊人久久| 成人h动漫精品一区二区| 亚洲精品一线二线三线无人区| 免费成人你懂的| 国产色产综合产在线视频| 奇米精品一区二区三区四区| 欧美酷刑日本凌虐凌虐| 午夜欧美大尺度福利影院在线看| 欧美日韩综合色| 亚洲成人中文在线| 欧美一区二区视频在线观看2020 | 久久久久99精品一区| 国产精品亚洲专一区二区三区| 久久婷婷色综合| 国产成人免费在线| 国产精品欧美综合在线| 99久久伊人久久99| 亚洲精品日日夜夜| 欧美日韩成人一区二区| 久久精品国产99国产| 久久综合九色综合欧美98 | 欧美国产欧美综合| 高清不卡一二三区| 最近中文字幕一区二区三区| 91浏览器在线视频| 丝瓜av网站精品一区二区| 欧美刺激午夜性久久久久久久| 久久国产精品72免费观看| 久久精品在这里| 99re这里只有精品视频首页| 亚洲国产欧美另类丝袜| 精品三级av在线| 成人av在线一区二区三区| 夜夜操天天操亚洲| 欧美电影精品一区二区| bt7086福利一区国产| 天堂成人免费av电影一区| 久久亚洲免费视频| 91麻豆高清视频| 免费观看久久久4p| ...中文天堂在线一区| 欧美三区免费完整视频在线观看| 另类综合日韩欧美亚洲| 综合精品久久久| 欧美一区二区三区四区高清| 国产成人精品网址| 亚洲成人av一区二区| 国产午夜亚洲精品午夜鲁丝片 | 欧美一级高清片在线观看| 成人av电影在线播放| 天堂资源在线中文精品| 中文字幕巨乱亚洲| 欧美日韩成人综合| voyeur盗摄精品| 秋霞午夜av一区二区三区| 国产精品九色蝌蚪自拍| 欧美一二三在线| 91久久人澡人人添人人爽欧美 | 欧美一区中文字幕| 成人精品视频一区二区三区尤物| 午夜精品在线视频一区| 中文字幕精品—区二区四季| 欧美高清你懂得| 99国产精品99久久久久久| 久久国产欧美日韩精品| 一区二区三区在线视频播放| 国产婷婷色一区二区三区在线| 欧美日韩成人在线| 色综合网色综合| 国产一区二区三区不卡在线观看| 亚洲福利视频一区二区| 中文字幕在线免费不卡| 精品国产乱码久久久久久久久 | 欧美电影免费观看高清完整版在线| 91碰在线视频| 国产成人在线视频网站| 秋霞电影网一区二区| 亚洲愉拍自拍另类高清精品| 国产精品久久久久一区二区三区共| 日韩精品一区二区三区在线播放 | 中文字幕一区二区三区精华液 | 国产视频一区二区在线观看| 日韩视频在线永久播放| 欧美美女黄视频| 日本精品视频一区二区| 成av人片一区二区| 国产v日产∨综合v精品视频| 寂寞少妇一区二区三区| 日本欧美加勒比视频| 五月婷婷激情综合| 亚洲午夜久久久| 一区二区日韩av| 亚洲主播在线观看| 夜夜夜精品看看| 亚洲制服丝袜av| 亚洲国产成人porn| 亚洲成人免费在线| 午夜精品一区二区三区电影天堂| 一区二区久久久| 亚洲午夜精品17c|