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

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

?? ser2410_hw.c

?? 增加串口,主要是wince方面的
?? C
?? 第 1 頁 / 共 5 頁
字號:
		}
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		bRet = FALSE;
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetParity 0x%X\r\n"), pHead));

	return(bRet);
}
//
// @doc OEM
// @func VOID | SL_SetStopBits |
//  This routine sets the Stop Bits for the device.
//
// @rdesc None.
//
BOOL
SL_SetStopBits(
              PVOID   pHead,      // @parm     PVOID returned by HWInit
              ULONG   StopBits  // @parm     ULONG StopBits field from DCB.
              )
{
	PS2410_UART_INFO    pHWHead = (PS2410_UART_INFO)pHead;

	UINT32 lcr;
	BOOL bRet;

	RETAILMSG (DEBUGMODE,(TEXT("+SL_SetStopBits 0x%X, 0x%X\r\n"), pHead, StopBits));

	bRet = TRUE;

	EnterCriticalSection(&(pHWHead->RegCritSec));

	try {
		lcr = INREG(pHWHead,rULCON);
		lcr &= ~SER2410_STOPBIT_MASK;

		// Note that 1.5 stop bits only works if the word size
		// is 5 bits.  Any other xmit word size will cause the
		// 1.5 stop bit setting to generate 2 stop bits.        
		switch ( StopBits ) {
		case ONESTOPBIT :
			lcr |= 0;//SERIAL_1_STOP ;
		break;
		case ONE5STOPBITS :
			//lcr |= SERIAL_1_5_STOP ;
			//break;
		case TWOSTOPBITS :
			lcr |= 4;//SERIAL_2_STOP ;
		break;
		default:
			bRet = FALSE;
		break;
		}

		if (bRet) {
			OUTREG(pHWHead,rULCON,lcr);
		}
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		bRet = FALSE;
	}

	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE,(TEXT("-SL_SetStopBits 0x%X\r\n"), pHead));

	return(bRet);
}

//
// @doc OEM
// @func ULONG | SL_GetRxBufferSize | This function returns
// the size of the hardware buffer passed to the interrupt
// initialize function.  It would be used only for devices
// which share a buffer between the MDD/PDD and an ISR.
//
// 
// @rdesc This routine always returns 0 for 16550 UARTS.
// 
ULONG
SL_GetRxBufferSize(
                  PVOID pHead
                  )
{
	RETAILMSG(DEBUGMODE, (TEXT("SL_GetRxBufferSize \r\n")));
	return(0);
}

//
// @doc OEM
// @func PVOID | SC_GetRxStart | This routine returns the start of the hardware
// receive buffer.  See SL_GetRxBufferSize.
// 
// @rdesc The return value is a pointer to the start of the device receive buffer.
// 
PVOID
SL_GetRxStart(
             PVOID   pHead // @parm PVOID returned by SC_init.
             )
{
	RETAILMSG(DEBUGMODE, (TEXT("SL_GetRxStart \r\n")));
	return(NULL);
}

//
// @doc OEM
// @func ULONG | SL_GetInterruptType | This function is called
//   by the MDD whenever an interrupt occurs.  The return code
//   is then checked by the MDD to determine which of the four
//   interrupt handling routines are to be called.
// 
// @rdesc This routine returns a bitmask indicating which interrupts
//   are currently pending.
// 
INTERRUPT_TYPE
SL_GetInterruptType(
                   PVOID pHead      // Pointer to hardware head
                   )
{
	PS2410_UART_INFO    pHWHead = (PS2410_UART_INFO)pHead;
	INTERRUPT_TYPE interrupts;
	ULONG IntPndVal=0;
	ULONG IntSubPndVal=0;

	try {
		IntPndVal = *(pHWHead->UART_INTSRCPND);
		IntSubPndVal = *(pHWHead->UART_INTSUBSRCPND);
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		RETAILMSG(DEBUGMODE, (TEXT("ACCESS VIOLATION ERROR \r\n")));
		IntPndVal = SER2410_INT_INVALID; // simulate no interrupt
	}

	RETAILMSG(DEBUGMODE, (TEXT("SL_GetInterruptType : 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X\r\n"),
		*(pHWHead->UART_INTMASK),
		*(pHWHead->UART_INTSUBMASK),
		*(pHWHead->UART_INTSRCPND),
		*(pHWHead->UART_INTSUBSRCPND),
		~(*(pHWHead->UART_INTSUBMASK)) & *(pHWHead->UART_INTSUBSRCPND),
		pHWHead->fSW_EnTxINT));

	if ( IntPndVal & (pHWHead->bINT) )
	{
		if ( IntSubPndVal == SER2410_INT_INVALID ) {      
			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: SER2410_INT_INVALID\r\n")));
			interrupts = INTR_NONE;
		}
		else if(IntSubPndVal & (pHWHead->bErrINT) )  {
			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: INTR_LINE\r\n")));
			interrupts = INTR_LINE;  // Error status
		}
		else if(IntSubPndVal & (pHWHead->bRxINT) )  {
			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: INTR_RX\r\n")));
			interrupts = INTR_RX;    // Received valid data.
		}
		else if((IntSubPndVal & (pHWHead->bTxINT)) && pHWHead->fSW_EnTxINT )  {
			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: INTR_TX\r\n")));
			interrupts = INTR_TX;
		}
		else 
		{
//			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: INTR_NONE\r\n")));
			interrupts = INTR_NONE;  // No interrupts pending, vector is useless
//			ClearINTPnd(pHWHead, pHWHead->bINT);
		}
	}
	else {
		RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: INTR_NONE(pHWHead->bINT)\r\n")));
		interrupts = INTR_NONE;  // No interrupts pending, vector is useless
	}

	return(interrupts);
}


// @doc OEM
// @func ULONG | SL_RxIntr | This routine gets several characters from the hardware
//   receive buffer and puts them in a buffer provided via the second argument.
//   It returns the number of bytes lost to overrun.
// 
// @rdesc The return value indicates the number of overruns detected.
//   The actual number of dropped characters may be higher.
//
ULONG
SL_RxIntr(
         PVOID pHead,                // @parm Pointer to hardware head
         PUCHAR pRxBuffer,           // @parm Pointer to receive buffer
         ULONG *pBufflen             // @parm In = max bytes to read, out = bytes read
         )
{
	PS2410_UART_INFO   pHWHead    = (PS2410_UART_INFO)pHead;

	ULONG        RetVal    = 0;
	ULONG        TargetRoom    = *pBufflen;
	BOOL        fRXFlag = FALSE;
	BOOL        fReplaceparityErrors = FALSE;
	BOOL        fNull;
	UCHAR       cEvtChar, cRXChar;
	ULONG       rFifoStat, RxFifoCnt, RxDataReady, nRxIntSrc;

	*pBufflen = 0;
	nRxIntSrc = pHWHead->bRxINT;

	RETAILMSG(DEBUGMODE, (TEXT("SL_RxIntr \r\n")));
	// LAM - I have local copies of some DCB elements since I don't
	// want to keep dereferencing inside my read loop and there are too
	// many of them to trust the compiler.
	cEvtChar = pHWHead->dcb.EvtChar;
	fNull = pHWHead->dcb.fNull;
	if ( pHWHead->dcb.fErrorChar && pHWHead->dcb.fParity )
		fReplaceparityErrors = TRUE;

	try {
		// S2410 UART Rx strategy is different from SER16550..
		rFifoStat = INREG(pHWHead,rUFSTAT);
		RxFifoCnt = rFifoStat & 0x0f;
		if((rFifoStat & 0x100)||(RxFifoCnt > 0))
			RxDataReady = 1;
		else
			RxDataReady = 0;

		while ( TargetRoom && RxDataReady ) {
			// If the line is unstable, we may check the error status...
			// But now, I ignore it....
			// ReadLSR( pHWHead );

			// Read the byte
			cRXChar = *(pHWHead->pUFRXH);
			RETAILMSG(DEBUGMODE, (TEXT("SL_RxIntr : cRXChar = 0x%x \r\n"), cRXChar));

			// But we may want to discard it
			if ( pHWHead->dcb.fDsrSensitivity &&
				(! (pHWHead->vUMSTAT & COM2410_MSR_DSR)) ) {
				// Do nothing - byte gets discarded
				RETAILMSG (1, (TEXT("Dropping byte because DSR is low\r\n")));
			} else if (!cRXChar && fNull) {
				// Do nothing - byte gets discarded
				RETAILMSG (1, (TEXT("Dropping NULL byte due to fNull\r\n")));
			} else {
				// Do character replacement if parity error detected.
				// See if we need to generate an EV_RXFLAG for the received char.
				if ( cRXChar == cEvtChar )
					fRXFlag = TRUE;
 
				// Finally, we can get byte, update status and save.
				if (!pHWHead->RxDiscard ) {
					*pRxBuffer++ = cRXChar;
					(*pBufflen)++;
				} else {
					RETAILMSG (1,(TEXT("SL_RXIntr : Dropping byte because now Txing\r\n")));
				}

				--TargetRoom;
//				RxFifoCnt--;
//				RxFifoCnt = INREG(pHWHead,rUFSTAT) & 0x0f;
				rFifoStat = INREG(pHWHead,rUFSTAT);
				RxFifoCnt = rFifoStat & 0x0f;
				if((rFifoStat & 0x100)||(RxFifoCnt > 0))
					RxDataReady = 1;
				else
					RxDataReady = 0;

			}
		}

		//Clear interrupt pending bit
		ClearSubINTPnd(pHWHead, nRxIntSrc);
		if ( *(pHWHead->UART_INTSUBSRCPND) & ( pHWHead->bRxINT | pHWHead->bErrINT ) )
		{
			RETAILMSG (DEBUGMODE, (TEXT("*(pHWHead->UART_INTSUBSRCPND) = %x \r\n"), *(pHWHead->UART_INTSUBSRCPND)));
			RETAILMSG (DEBUGMODE, (TEXT("Do Not Clear bINT \r\n")));
		}
		else
		{
			ClearINTPnd(pHWHead, pHWHead->bINT);
		}
		EnINT(pHWHead, pHWHead->bINT);
		EnSubINT(pHWHead, nRxIntSrc);
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		// just exit
	}

	// if we saw one (or more) EVT chars, then generate an event
	if ( fRXFlag )
		pHWHead->EventCallback( pHWHead->pMddHead, EV_RXFLAG );

	if ( pHWHead->DroppedBytes )
	{
		RETAILMSG (DEBUGMODE, (TEXT("Rx drop %d.\r\n"), pHWHead->DroppedBytes));
	}
    
	RetVal = pHWHead->DroppedBytes;
	pHWHead->DroppedBytes = 0;
	return(RetVal);
}

// @doc OEM
// @func ULONG | SL_PutBytes | This routine is called from the MDD
//   in order to write a stream of data to the device. (Obselete)
// 
// @rdesc Always returns 0
//
ULONG
SL_PutBytes(
           PVOID   pHead,        // @parm    PVOID returned by HWInit.
           PUCHAR  pSrc,        // @parm    Pointer to bytes to be sent.
           ULONG   NumberOfBytes,  // @parm    Number of bytes to be sent.
           PULONG  pBytesSent        // @parm    Pointer to actual number of bytes put.
           )
{
	PS2410_UART_INFO   pHWHead    = (PS2410_UART_INFO)pHead;
	RETAILMSG(1,(TEXT("This routine is called by old MDD\r\n")));
	return(0);
}

//
// @doc OEM
// @func ULONG | SL_TXIntr | This routine is called from the old MDD
//   whenever INTR_TX is returned by SL_GetInterruptType (Obselete)
// 
// @rdesc None
//
VOID
SL_TxIntr(
         PVOID pHead                // Hardware Head
         )
{
    PS2410_UART_INFO   pHWHead    = (PS2410_UART_INFO)pHead;
    RETAILMSG(1, (TEXT("SL_TxIntr(From old MDD)\n")));
}

//
// @doc OEM
// @func ULONG | SL_TXIntrEx | This routine is called from the new MDD
//   whenever INTR_TX is returned by SL_GetInterruptType
// 
// @rdesc None
//
VOID
SL_TxIntrEx(
           PVOID pHead,                // Hardware Head
           PUCHAR pTxBuffer,          // @parm Pointer to receive buffer
           ULONG *pBufflen            // @parm In = max bytes to transmit, out = bytes transmitted
           )
{
	PS2410_UART_INFO   pHWHead    = (PS2410_UART_INFO)pHead;

	UCHAR       byteCount;
	ULONG NumberOfBytes = *pBufflen;
	ULONG       rFifoStat, TxFifoCnt;
	unsigned int FifoModeReg;
   
	RETAILMSG(DEBUGMODE, (TEXT("SL_TxIntrEx \r\n")));
	// We may be done sending.  If so, just disable the TX interrupts and return to the MDD.  
	if( ! *pBufflen ) {
		DisEnINT(pHWHead, pHWHead->bINT);
		DisEnSubINT(pHWHead, pHWHead->bTxINT);
		pHWHead->fSW_EnTxINT = FALSE;

		ClearINTPnd(pHWHead, pHWHead->bINT);
		return;
	}
    
	*pBufflen = 0;  // In case we don't send anything below.

	// Disable xmit intr.  Most 16550s will keep hammering
	// us with xmit interrupts if we don't turn them off
	// Whoever gets the FlushDone will then need to turn
	// TX Ints back on if needed.
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {
		// Need to signal FlushDone for XmitComChar
		PulseEvent(pHWHead->FlushDone);

		pHWHead->CommErrors &= ~CE_TXFULL;
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		// Do nothing.  The worst case is that this was a fluke,
		// and a TX Intr will come right back at us and we will
		// resume transmission.
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));

	//  OK, now lets actually transmit some data.
	EnterCriticalSection(&(pHWHead->TransmitCritSec));
	EnterCriticalSection(&(pHWHead->RegCritSec));

	FifoModeReg = INREG(pHWHead, rUFCON);

	try {
		rFifoStat = INREG(pHWHead,rUFSTAT);
		TxFifoCnt = ((rFifoStat & SER2410_FIFOCNT_MASK_TX) >> 4);

		if (pHWHead->UseIrDA)
		{
			// IR is half-duplex.
			pHWHead->RxDiscard = TRUE;
			DisEnSubINT(pHWHead, pHWHead->bRxINT);
		}

		if (!(rFifoStat & SER2410_FIFOFULL_TX) && (TxFifoCnt < (SER2410_FIFO_DEPTH_TX-1))) {
			byteCount = (unsigned char)(SER2410_FIFO_DEPTH_TX-TxFifoCnt);
			RETAILMSG(DEBUGMODE, (TEXT("SL_TxIntrEx : %d \r\n"), NumberOfBytes));
			for ( *pBufflen=0; NumberOfBytes && byteCount; NumberOfBytes--, byteCount-- ) {
				unsigned int i, tmpreg;
				*(pHWHead->pUFTXH) = *pTxBuffer;
				RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - *pTxBuffer = 0x%x \r\n"), *pTxBuffer));
				if (FifoModeReg&0x1) // FIFO Mode enabled.
				{
					for ( i = 0; i < 600000; i++ )
					{
						tmpreg = INREG(pHWHead, rUFSTAT);
						//tmpreg & 0x200 == 1  ->  Fifo full -> waiting...
						//tmpreg & 0xf0 == 0 -> There is no data to send -> break loop.
						if ( (tmpreg & 0x200) == 0x200 )
						{
//							RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt :  fifo full : tmpreg = %x \r\n"), tmpreg));
							continue;
						}
						else break;
					}
					if ( i == 600000 )	// Time Out Error
					{
						RETAILMSG (1, (TEXT("SL_TxInt : Error : i = %d \r\n"), i));
					}
				}
				else		// FIFO Mode disabled.
				{
					for ( i = 0; i < 600000; i++ )
					{
						tmpreg = INREG(pHWHead, rUTRSTAT);
						if ( tmpreg & 0x2 ) break;
					}
					if ( i == 600000 )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品自拍av| 色婷婷av一区二区三区大白胸| 中文字幕不卡在线播放| 欧美无人高清视频在线观看| 国产一区美女在线| 亚洲国产成人精品视频| 日本一区二区三区久久久久久久久不| 欧美视频在线一区| 成人黄色在线网站| 精品一区二区三区欧美| 亚洲午夜私人影院| 中文字幕一区二区三区精华液 | 欧美精品在线视频| 成人性生交大合| 蜜桃一区二区三区在线| 一区二区三区欧美| 国产精品女上位| 久久久精品日韩欧美| 日韩免费观看高清完整版| 欧美天堂一区二区三区| 成人app网站| 国产91丝袜在线播放0| 美女一区二区三区| 石原莉奈一区二区三区在线观看| 亚洲欧洲制服丝袜| 一区在线观看视频| 国产精品进线69影院| 欧美国产综合一区二区| 久久一区二区视频| 欧美v日韩v国产v| 91精品国产一区二区人妖| 欧美日韩dvd在线观看| 欧美性一级生活| 色吧成人激情小说| 色婷婷综合久久久久中文一区二区| 成人午夜激情视频| 福利电影一区二区三区| 懂色av一区二区三区免费看| 国产美女娇喘av呻吟久久| 国产一级精品在线| 国产麻豆精品久久一二三| 国产一区二区免费视频| 国产一区二区三区观看| 91麻豆视频网站| 美日韩黄色大片| 免费xxxx性欧美18vr| 三级影片在线观看欧美日韩一区二区| 亚洲成人av一区二区三区| 午夜一区二区三区视频| 香蕉久久一区二区不卡无毒影院| 亚洲国产精品久久久男人的天堂 | 亚洲天堂av一区| 日韩毛片精品高清免费| 亚洲精品欧美在线| 亚洲国产精品久久不卡毛片 | 欧美日韩免费一区二区三区| 欧美日韩免费视频| 欧美xxxxxxxxx| 中文字幕第一区二区| 亚洲欧美日韩一区| 午夜伊人狠狠久久| 久久超碰97中文字幕| 盗摄精品av一区二区三区| 91免费看视频| 欧美精选一区二区| 久久综合成人精品亚洲另类欧美 | 首页亚洲欧美制服丝腿| 久久精品国产一区二区| 懂色一区二区三区免费观看| 91女人视频在线观看| 欧美精三区欧美精三区| 精品国产一区二区三区忘忧草| 国产精品日韩精品欧美在线| 一区二区日韩av| 美国一区二区三区在线播放| 成人丝袜18视频在线观看| 欧美日韩一区二区三区免费看| 精品人在线二区三区| 最新日韩av在线| 久久成人羞羞网站| 91在线免费看| 日韩久久精品一区| 亚洲蜜臀av乱码久久精品蜜桃| 蜜桃传媒麻豆第一区在线观看| 成人午夜看片网址| 制服.丝袜.亚洲.中文.综合| 国产欧美日韩精品在线| 亚洲va在线va天堂| 成人黄色在线视频| 日韩欧美你懂的| 一区二区三区欧美亚洲| 黄色日韩网站视频| 欧美日韩国产免费一区二区| 中文字幕欧美日韩一区| 亚洲va欧美va人人爽午夜 | 一区二区三区四区亚洲| 日韩高清中文字幕一区| 99精品国产热久久91蜜凸| 欧美视频第二页| 精品国产乱码久久久久久夜甘婷婷| 国产精品美女一区二区在线观看| 亚洲小说春色综合另类电影| 国产在线视频精品一区| 99久久久精品| 日韩女优av电影在线观看| 亚洲色图欧洲色图| 麻豆免费精品视频| 欧美亚洲国产一区二区三区| 久久久亚洲高清| 一区二区三区四区蜜桃| 国产精品亚洲一区二区三区在线| 在线一区二区三区做爰视频网站| 久久精品视频免费| 午夜精品福利一区二区三区av| 奇米四色…亚洲| 欧美久久一区二区| 亚洲乱码中文字幕| 99re热视频精品| 日韩美女主播在线视频一区二区三区| 亚洲男人天堂av| 日韩av网站在线观看| 欧美色视频一区| 中文字幕一区在线观看视频| 麻豆精品一区二区三区| 欧美三级中文字幕| 亚洲精品免费视频| 丁香一区二区三区| 精品精品欲导航| 天堂成人国产精品一区| 色屁屁一区二区| 亚洲品质自拍视频| 成人综合婷婷国产精品久久免费| 日韩欧美视频一区| 日韩中文字幕麻豆| 欧美日韩国产经典色站一区二区三区| 一区在线播放视频| 国产一区亚洲一区| 精品成人a区在线观看| 国产一区二区在线视频| 日韩三级电影网址| 午夜精品免费在线观看| 91色综合久久久久婷婷| 中文字幕不卡在线播放| 麻豆精品久久精品色综合| 精品美女一区二区| 蜜臀a∨国产成人精品| 9191久久久久久久久久久| 亚洲福利视频三区| 欧美三级乱人伦电影| 丝袜美腿亚洲综合| 欧美色综合久久| 亚洲小说欧美激情另类| 欧美中文字幕一二三区视频| 亚洲欧美一区二区三区孕妇| 在线亚洲免费视频| 亚洲成人资源在线| 欧美精品v日韩精品v韩国精品v| 亚洲国产成人av网| 欧美精品在线一区二区| 国产乱码一区二区三区| 国产午夜亚洲精品理论片色戒 | av一区二区三区| 国产精品成人网| 色婷婷久久综合| 亚洲一区二区偷拍精品| 精品少妇一区二区三区免费观看| 狠狠色综合播放一区二区| 精品国产乱码久久久久久夜甘婷婷| 黄色资源网久久资源365| 日本一区二区三区在线观看| 北条麻妃一区二区三区| 亚洲黄一区二区三区| 日本精品裸体写真集在线观看| 亚洲一区二区三区四区中文字幕| 欧美理论电影在线| 黑人巨大精品欧美一区| 国产丝袜欧美中文另类| 欧美在线高清视频| 热久久国产精品| 国产日韩av一区| 91精品国产综合久久小美女| 韩国三级在线一区| 国产精品久久久久久久第一福利| 色视频欧美一区二区三区| 婷婷综合另类小说色区| 国产精品美女久久久久高潮| 在线亚洲人成电影网站色www| 日韩激情视频在线观看| 久久天天做天天爱综合色| 成人午夜在线视频| 蜜臀国产一区二区三区在线播放 | www.日韩精品| 亚洲mv大片欧洲mv大片精品| 精品第一国产综合精品aⅴ| 成人av网站免费| 亚洲成人激情自拍| 日韩一级二级三级| 欧美影院一区二区| 国产盗摄一区二区| 一区二区三区蜜桃网|