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

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

?? ioctl.c

?? usb to rs232 虛擬RS232串口驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*++

Copyright (c) 2005-2006  E0 Technology,Inc.

Module Name:

	ioctl.c

Abstract:

	Virtual Com Port Driver for USB to RS232 Converter of E0 Technology,Inc.

Environment:

	Kernel mode

Notes:

Revision History:

    2006/3/1 : 	Adapted from the serial DDK sample.
--*/


#include "usb2com.h"

PCHAR
SerialGetIoctlName(
    IN ULONG      IoControlCode
    )
/*++

Routine Description:
    SerialGetIoctlName returns the name of the ioctl

--*/
{
    switch (IoControlCode)
    {
    case IOCTL_SERIAL_SET_BAUD_RATE : return "IOCTL_SERIAL_SET_BAUD_RATE";
    case IOCTL_SERIAL_GET_BAUD_RATE: return "IOCTL_SERIAL_GET_BAUD_RATE";
    case IOCTL_SERIAL_GET_MODEM_CONTROL: return "IOCTL_SERIAL_GET_MODEM_CONTROL";
    case IOCTL_SERIAL_SET_MODEM_CONTROL: return "IOCTL_SERIAL_SET_MODEM_CONTROL";
    case IOCTL_SERIAL_SET_FIFO_CONTROL: return "IOCTL_SERIAL_SET_FIFO_CONTROL";
    case IOCTL_SERIAL_SET_LINE_CONTROL: return "IOCTL_SERIAL_SET_LINE_CONTROL";
    case IOCTL_SERIAL_GET_LINE_CONTROL: return "IOCTL_SERIAL_GET_LINE_CONTROL";
    case IOCTL_SERIAL_SET_TIMEOUTS: return "IOCTL_SERIAL_SET_TIMEOUTS";
    case IOCTL_SERIAL_GET_TIMEOUTS: return "IOCTL_SERIAL_GET_TIMEOUTS";
    case IOCTL_SERIAL_SET_CHARS: return "IOCTL_SERIAL_SET_CHARS";
    case IOCTL_SERIAL_GET_CHARS: return "IOCTL_SERIAL_GET_CHARS";
    case IOCTL_SERIAL_SET_DTR: return "IOCTL_SERIAL_SET_DTR";
    case IOCTL_SERIAL_CLR_DTR: return "IOCTL_SERIAL_SET_DTR";
    case IOCTL_SERIAL_RESET_DEVICE: return "IOCTL_SERIAL_RESET_DEVICE";
    case IOCTL_SERIAL_SET_RTS: return "IOCTL_SERIAL_SET_RTS";
    case IOCTL_SERIAL_CLR_RTS: return "IOCTL_SERIAL_CLR_RTS";
    case IOCTL_SERIAL_SET_XOFF: return "IOCTL_SERIAL_SET_XOFF";
    case IOCTL_SERIAL_SET_XON: return "IOCTL_SERIAL_SET_XON";
    case IOCTL_SERIAL_SET_BREAK_ON: return "IOCTL_SERIAL_SET_BREAK_ON";
    case IOCTL_SERIAL_SET_BREAK_OFF: return "IOCTL_SERIAL_SET_BREAK_OFF";
    case IOCTL_SERIAL_SET_QUEUE_SIZE: return "IOCTL_SERIAL_SET_QUEUE_SIZE";
    case IOCTL_SERIAL_GET_WAIT_MASK: return "IOCTL_SERIAL_GET_WAIT_MASK";
    case IOCTL_SERIAL_SET_WAIT_MASK: return "IOCTL_SERIAL_SET_WAIT_MASK";
    case IOCTL_SERIAL_WAIT_ON_MASK: return "IOCTL_SERIAL_WAIT_ON_MASK";
    case IOCTL_SERIAL_IMMEDIATE_CHAR: return "IOCTL_SERIAL_IMMEDIATE_CHAR";
    case IOCTL_SERIAL_PURGE: return "IOCTL_SERIAL_PURGE";
    case IOCTL_SERIAL_GET_HANDFLOW: return "IOCTL_SERIAL_GET_HANDFLOW";
    case IOCTL_SERIAL_SET_HANDFLOW: return "IOCTL_SERIAL_SET_HANDFLOW";
    case IOCTL_SERIAL_GET_MODEMSTATUS: return "IOCTL_SERIAL_GET_MODEMSTATUS";
    case IOCTL_SERIAL_GET_DTRRTS: return "IOCTL_SERIAL_GET_DTRRTS";
    case IOCTL_SERIAL_GET_COMMSTATUS: return "IOCTL_SERIAL_GET_COMMSTATUS";
    case IOCTL_SERIAL_GET_PROPERTIES: return "IOCTL_SERIAL_GET_PROPERTIES";
    case IOCTL_SERIAL_XOFF_COUNTER: return "IOCTL_SERIAL_XOFF_COUNTER";
    case IOCTL_SERIAL_LSRMST_INSERT: return "IOCTL_SERIAL_LSRMST_INSERT";
    case IOCTL_SERIAL_CONFIG_SIZE: return "IOCTL_SERIAL_CONFIG_SIZE";
    case IOCTL_SERIAL_GET_STATS: return "IOCTL_SERIAL_GET_STATS";
    case IOCTL_SERIAL_CLEAR_STATS: return "IOCTL_SERIAL_CLEAR_STATS";
    default: return "UnKnown ioctl";
    }
}

#define HID_REQ_GET_REPORT              0x01
#define HID_REQ_GET_IDLE                0x02
#define HID_REQ_GET_PROTOCOL            0x03
#define HID_REQ_SET_REPORT              0x09
#define HID_REQ_SET_IDLE                0x0A
#define HID_REQ_SET_PROTOCOL            0x0B
/*
#define STOP_BIT_1      0
#define STOP_BITS_1_5   1
#define STOP_BITS_2     2

#define NO_PARITY        0
#define ODD_PARITY       1
#define EVEN_PARITY      2
#define MARK_PARITY      3
#define SPACE_PARITY     4
*/
NTSTATUS 
SerialSetBaudRateAndLineControl(
	IN PDEVICE_EXTENSION deviceExtension,
	IN ULONG NewBaudRate,
	IN PSERIAL_LINE_CONTROL NewSettings
	)
{
	NTSTATUS	Status = STATUS_SUCCESS;
	ULONG		WrittenLen;
	UCHAR		FeatureBuf[5];
	UCHAR		config;

	//do somthing
	DbgPrint("BaudRate: %d\n",NewBaudRate);
	if(NewBaudRate == 0)
		NewBaudRate = deviceExtension->BaudRate;
	if(NewSettings == NULL)
		NewSettings = &deviceExtension->SerialLineControl;
	DbgPrint("Serial: SerialSetLineControl(%wZ, Settings { %lu %lu %lu })\n",
		&deviceExtension->DosName, NewSettings->StopBits, NewSettings->Parity, NewSettings->WordLength);

	*((ULONG *)FeatureBuf) = NewBaudRate;
	//cypress_m8.c
	config = 0;                      	// reset config byte
	config |= NewSettings->WordLength-5;    // assign data bits in 2 bit space ( max 3 )
	/* 1 bit gap */
	config |= ((NewSettings->StopBits ? 1 : 0) << 3);      // assign stop bits in 1 bit space
	config |= ((NewSettings->Parity > 0) << 4);  // assign parity flag in 1 bit space
	config |= ((NewSettings->Parity&1) << 5);    // assign parity type in 1 bit space
	/* 1 bit gap */
	//config |= (reset << 7); 
	FeatureBuf[4] = config;       
	Status = UsbDoControlTransfer(
			deviceExtension->DeviceObject,
			URB_FUNCTION_CLASS_INTERFACE,
			USBD_SHORT_TRANSFER_OK,
			HID_REQ_SET_REPORT,
  			0x0300,//Report Type(01 Input 02 Output 03 Feature) and Report ID
   			0,
   			5,
			FeatureBuf,
			&WrittenLen);
	DbgPrint("FeatureBuf: %02x %02x %02x %02x %02x\n",
			FeatureBuf[0],
			FeatureBuf[1],
			FeatureBuf[2],
			FeatureBuf[3],
			FeatureBuf[4]);
	FeatureBuf[0] = FeatureBuf[1] = FeatureBuf[2] = FeatureBuf[3] = FeatureBuf[4] = 0;	
	Status = UsbDoControlTransfer(
			deviceExtension->DeviceObject,
			URB_FUNCTION_CLASS_INTERFACE,
			USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK,
			HID_REQ_GET_REPORT,
  			0x0300,//Report Type(01 Input 02 Output 03 Feature) and Report ID
   			0,
   			5,
			FeatureBuf,
			&WrittenLen);	
	DbgPrint("FeatureBuf: %02x %02x %02x %02x %02x\n",
			FeatureBuf[0],
			FeatureBuf[1],
			FeatureBuf[2],
			FeatureBuf[3],
			FeatureBuf[4]);	
	if (NT_SUCCESS(Status))
	{
		deviceExtension->BaudRate = NewBaudRate;
		deviceExtension->SerialLineControl = *NewSettings;
	}
	return Status;
}

NTSTATUS 
SerialSetLineControl(
	IN PDEVICE_EXTENSION DeviceExtension,
	IN PSERIAL_LINE_CONTROL NewSettings)
{
	NTSTATUS Status = STATUS_SUCCESS;

	ASSERT(DeviceExtension);
	ASSERT(NewSettings);

	//do somthing
	if (NT_SUCCESS(Status))
		DeviceExtension->SerialLineControl = *NewSettings;

	return Status;
}

static BOOLEAN
SerialClearPerfStats(
	IN PDEVICE_EXTENSION DeviceExtension)
{
	ASSERT(DeviceExtension);

	RtlZeroMemory(&DeviceExtension->SerialPerfStats, sizeof(SERIALPERF_STATS));
	DeviceExtension->BreakInterruptErrorCount = 0;
	return TRUE;
}

static BOOLEAN
SerialGetPerfStats(IN PIRP pIrp)
{
	PDEVICE_EXTENSION pDeviceExtension;
	
	ASSERT(pIrp);
	pDeviceExtension = (PDEVICE_EXTENSION)
		IoGetCurrentIrpStackLocation(pIrp)->DeviceObject->DeviceExtension;
	
	/*
	 * we assume buffer is big enough to hold SerialPerfStats structure
	 * caller must verify this
	 */
	RtlCopyMemory(
		pIrp->AssociatedIrp.SystemBuffer,
		&pDeviceExtension->SerialPerfStats,
		sizeof(SERIALPERF_STATS)
	);
	return TRUE;
}

static NTSTATUS
SerialGetCommProp(
	OUT PSERIAL_COMMPROP pCommProp,
	IN PDEVICE_EXTENSION DeviceExtension)
{
	ASSERT(pCommProp);

	RtlZeroMemory(pCommProp, sizeof(SERIAL_COMMPROP));

	pCommProp->PacketLength = sizeof(SERIAL_COMMPROP);
	pCommProp->PacketVersion = 2;
	pCommProp->ServiceMask = SERIAL_SP_SERIALCOMM;
	pCommProp->MaxTxQueue = pCommProp->CurrentTxQueue = DeviceExtension->OutputBuffer.Length - 1;
	pCommProp->MaxRxQueue = pCommProp->CurrentRxQueue = DeviceExtension->InputBuffer.Length - 1;
	pCommProp->ProvSubType = SERIAL_SP_RS232;
	pCommProp->ProvCapabilities = SERIAL_PCF_DTRDSR | SERIAL_PCF_INTTIMEOUTS | SERIAL_PCF_PARITY_CHECK
		| SERIAL_PCF_RTSCTS | SERIAL_PCF_SETXCHAR | SERIAL_PCF_SPECIALCHARS | SERIAL_PCF_TOTALTIMEOUTS
		| SERIAL_PCF_XONXOFF;
	pCommProp->SettableParams = SERIAL_SP_BAUD | SERIAL_SP_DATABITS | SERIAL_SP_HANDSHAKING
		| SERIAL_SP_PARITY | SERIAL_SP_PARITY_CHECK | SERIAL_SP_STOPBITS;

	/* SettableBaud is related to Uart type */
	pCommProp->SettableBaud = SERIAL_BAUD_075 | SERIAL_BAUD_110 | SERIAL_BAUD_134_5
		| SERIAL_BAUD_150 | SERIAL_BAUD_300 | SERIAL_BAUD_600 | SERIAL_BAUD_1200
		| SERIAL_BAUD_1800 | SERIAL_BAUD_2400 | SERIAL_BAUD_4800 | SERIAL_BAUD_7200
		| SERIAL_BAUD_9600 | SERIAL_BAUD_USER;
	pCommProp->MaxBaud = SERIAL_BAUD_USER;
	pCommProp->SettableData = SERIAL_DATABITS_5 | SERIAL_DATABITS_6 | SERIAL_DATABITS_7 | SERIAL_DATABITS_8;
	pCommProp->SettableStopParity = SERIAL_STOPBITS_10 | SERIAL_STOPBITS_15 | SERIAL_STOPBITS_20
		| SERIAL_PARITY_NONE | SERIAL_PARITY_ODD | SERIAL_PARITY_EVEN | SERIAL_PARITY_MARK | SERIAL_PARITY_SPACE;

	pCommProp->ProvSpec2 = 0; /* Size of provider-specific data */

	return STATUS_SUCCESS;
}

static NTSTATUS
SerialGetCommStatus(
	OUT PSERIAL_STATUS pSerialStatus,
	IN PDEVICE_EXTENSION DeviceExtension)
{
	KIRQL Irql;

	ASSERT(pSerialStatus);
	RtlZeroMemory(pSerialStatus, sizeof(SERIAL_STATUS));

	pSerialStatus->Errors = 0;
	if (DeviceExtension->BreakInterruptErrorCount)
		pSerialStatus->Errors |= SERIAL_ERROR_BREAK;
	if (DeviceExtension->SerialPerfStats.FrameErrorCount)
		pSerialStatus->Errors |= SERIAL_ERROR_FRAMING;
	if (DeviceExtension->SerialPerfStats.SerialOverrunErrorCount)
		pSerialStatus->Errors |= SERIAL_ERROR_OVERRUN;
	if (DeviceExtension->SerialPerfStats.BufferOverrunErrorCount)
		pSerialStatus->Errors |= SERIAL_ERROR_QUEUEOVERRUN;
	if (DeviceExtension->SerialPerfStats.ParityErrorCount)
		pSerialStatus->Errors |= SERIAL_ERROR_PARITY;

	pSerialStatus->HoldReasons = 0; /* FIXME */

	KeAcquireSpinLock(&DeviceExtension->InputBufferLock, &Irql);
	pSerialStatus->AmountInInQueue = (DeviceExtension->InputBuffer.WritePosition + DeviceExtension->InputBuffer.Length
		- DeviceExtension->InputBuffer.ReadPosition) % DeviceExtension->InputBuffer.Length;
	KeReleaseSpinLock(&DeviceExtension->InputBufferLock, Irql);

	//KeAcquireSpinLock(&DeviceExtension->OutputBufferLock, &Irql);
	//pSerialStatus->AmountInOutQueue = (DeviceExtension->OutputBuffer.WritePosition + DeviceExtension->OutputBuffer.Length
	//	- DeviceExtension->OutputBuffer.ReadPosition) % DeviceExtension->OutputBuffer.Length;
	//KeReleaseSpinLock(&DeviceExtension->OutputBufferLock, Irql);
	
	pSerialStatus->AmountInOutQueue = DeviceExtension->TotalCharsQueued;

	pSerialStatus->EofReceived = FALSE; /* always FALSE */
	pSerialStatus->WaitForImmediate = FALSE; /* always FALSE */

	return STATUS_SUCCESS;
}

NTSTATUS
USB2COM_ProcessIOCTL(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

    Dispatch table handler for IRP_MJ_DEVICE_CONTROL; 
    Handle DeviceIoControl() calls  from User mode


Arguments:

    DeviceObject - pointer to the FDO for this instance of the 82930 device.


Return Value:

    NT status code

--*/
{
    PIO_STACK_LOCATION irpStack;
    PVOID ioBuffer;
    ULONG inputBufferLength;
    ULONG outputBufferLength;
    PDEVICE_EXTENSION deviceExtension;
    ULONG ioControlCode;
    NTSTATUS ntStatus;
    ULONG length=0;
    PUCHAR pch;
    PUSB_CONFIGURATION_DESCRIPTOR configurationDescriptor;

    USB2COM_KdPrint( DBGLVL_DEFAULT,("IRP_MJ_DEVICE_CONTROL\n"));

    //
    // Get a pointer to the current location in the Irp. This is where
    //     the function codes and parameters are located.
    //

    deviceExtension = DeviceObject->DeviceExtension;
    

    irpStack = IoGetCurrentIrpStackLocation (Irp);

    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;

    // get pointers and lengths of the caller's (user's) IO buffer
    ioBuffer           = Irp->AssociatedIrp.SystemBuffer;
    inputBufferLength  = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;

    ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;
    USB2COM_KdPrint( DBGLVL_DEFAULT,("IoControl: %s\n",SerialGetIoctlName(ioControlCode)));
    
    if(ioControlCode == IOCTL_USB2COM_RESET_PIPE 
    	|| ioControlCode == IOCTL_USB2COM_GET_CONFIG_DESCRIPTOR
    	|| ioControlCode == IOCTL_USB2COM_RESET_DEVICE
    )
    {
	    // Can't accept a new io request if:
	    //  1) device is removed, 
	    //  2) has never been started, 
	    //  3) is stopped,
	    //  4) has a remove request pending,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美国产高清| 久久男人中文字幕资源站| 国产剧情av麻豆香蕉精品| 亚洲成av人片在线| 亚洲午夜电影网| 亚洲图片欧美综合| 亚洲一二三四区| 亚洲一区日韩精品中文字幕| 《视频一区视频二区| 中文字幕在线一区二区三区| 国产亚洲欧洲997久久综合 | 国产精品久久久久久户外露出 | www国产精品av| 久久综合色综合88| 2023国产精品视频| 欧美激情一区二区三区| 中文无字幕一区二区三区| 亚洲人成网站精品片在线观看| 亚洲欧洲成人精品av97| 久久久无码精品亚洲日韩按摩| 欧美精品一区二区三区在线播放 | 豆国产96在线|亚洲| 99re这里只有精品6| 日本精品一区二区三区四区的功能| 色综合久久99| 3d动漫精品啪啪1区2区免费| 欧美精品一区二区三区高清aⅴ| 欧美精品一区二区蜜臀亚洲| 中文字幕巨乱亚洲| 亚洲高清免费视频| 另类专区欧美蜜桃臀第一页| 成人综合在线网站| 日本道精品一区二区三区| 538在线一区二区精品国产| 精品国产污网站| 国产蜜臀97一区二区三区| 综合婷婷亚洲小说| 蜜桃传媒麻豆第一区在线观看| 国产精品18久久久久久久久| 色哟哟一区二区在线观看 | 欧美国产一区在线| 亚洲观看高清完整版在线观看| 久久er精品视频| 91免费观看视频| 日韩美女天天操| 亚洲狼人国产精品| 激情深爱一区二区| 欧美性受xxxx黑人xyx性爽| 久久久久国产免费免费| 午夜影院久久久| 成人动漫av在线| 日韩欧美一区中文| 亚洲国产乱码最新视频 | 一本到不卡精品视频在线观看 | 久久综合久久99| 亚洲电影视频在线| va亚洲va日韩不卡在线观看| 91精品国产综合久久小美女| 综合电影一区二区三区| 国模套图日韩精品一区二区| 欧美欧美欧美欧美首页| 亚洲精品免费电影| 成人sese在线| 国产三级久久久| 久久精品国产77777蜜臀| 欧美写真视频网站| 18欧美亚洲精品| eeuss影院一区二区三区| 精品国产3级a| 久久国产人妖系列| 日韩视频在线一区二区| 三级亚洲高清视频| 欧美日韩高清一区二区三区| 一区二区三区中文字幕精品精品| 成人午夜视频福利| 国产精品久久久久久久蜜臀| 国产不卡一区视频| 日本一区二区视频在线| 风间由美中文字幕在线看视频国产欧美| 日韩欧美亚洲一区二区| 久久精品国产**网站演员| 欧美一区二区三区在线电影| 日韩和欧美的一区| 日韩精品一区二区三区老鸭窝| 青青草91视频| 欧美一级黄色片| 成人午夜激情片| 国产精品久久久久久久久图文区 | 日本不卡高清视频| 91精品国产一区二区| 麻豆国产精品官网| xnxx国产精品| 99视频热这里只有精品免费| 亚洲三级免费电影| 欧美色老头old∨ideo| 视频一区二区三区入口| 精品国产91久久久久久久妲己| 国产成人精品一区二区三区四区| 国产精品欧美精品| 欧美午夜精品一区二区蜜桃| 日韩av二区在线播放| 精品少妇一区二区三区在线播放| 国产成人免费在线观看不卡| 亚洲素人一区二区| 日韩一区二区三区观看| 成人晚上爱看视频| 亚洲成人自拍网| 久久综合狠狠综合久久激情| 97se亚洲国产综合在线| 人妖欧美一区二区| 欧美国产精品劲爆| 9191国产精品| 国产凹凸在线观看一区二区| 亚洲免费观看视频| 久久蜜臀中文字幕| 欧美日韩一级片网站| 国产成人一级电影| 婷婷综合另类小说色区| 久久久不卡影院| 欧美日韩久久一区二区| 国产91丝袜在线播放| 天天操天天综合网| 国产午夜久久久久| 91精品婷婷国产综合久久性色| 国产成人精品三级麻豆| 日韩二区三区在线观看| 亚洲欧洲另类国产综合| 日韩欧美黄色影院| 欧美自拍丝袜亚洲| 成人网在线播放| 久久综合综合久久综合| 亚洲高清视频的网址| 国产精品毛片高清在线完整版| 日韩一区二区精品| 欧美午夜宅男影院| 97国产精品videossex| 国内欧美视频一区二区| 日韩精品色哟哟| 亚洲一区在线视频观看| 中文字幕日韩精品一区| 国产欧美日韩一区二区三区在线观看| 7777精品伊人久久久大香线蕉的| 97精品超碰一区二区三区| 丁香网亚洲国际| 国产美女娇喘av呻吟久久| 青草av.久久免费一区| 亚洲高清免费视频| 图片区小说区国产精品视频| 一区二区三区精品久久久| 亚洲少妇中出一区| 国产精品久久久久久久蜜臀| 中文一区二区在线观看| 久久久无码精品亚洲日韩按摩| 日韩欧美国产不卡| 欧美大片免费久久精品三p| 日韩一区二区免费电影| 欧美tickle裸体挠脚心vk| 久久尤物电影视频在线观看| 精品国产伦一区二区三区观看方式 | 欧美一区二区三区四区久久| 欧美日韩电影一区| 91精品国产一区二区三区| 欧美va日韩va| 欧美国产在线观看| 亚洲乱码日产精品bd| 亚洲精品乱码久久久久久久久| 亚洲精品免费电影| 亚洲国产va精品久久久不卡综合| 天堂在线一区二区| 久久99精品久久久久久| 国内成人自拍视频| 成人av网站在线观看免费| av一本久道久久综合久久鬼色| caoporn国产一区二区| 在线精品视频免费观看| 91麻豆精品久久久久蜜臀| 欧美成va人片在线观看| 欧美韩国日本综合| 一区二区三区免费在线观看| 日韩av一二三| 国产91丝袜在线播放0| 欧美日韩在线播放三区四区| 日韩一级片在线播放| 久久免费的精品国产v∧| 亚洲日本乱码在线观看| 日本系列欧美系列| 成人va在线观看| 欧美一区二区视频在线观看| 欧美国产97人人爽人人喊| 性欧美大战久久久久久久久| 国产一区二区女| 欧美日韩免费不卡视频一区二区三区| 欧美成人欧美edvon| 亚洲欧美另类久久久精品| 蜜臀av亚洲一区中文字幕| 91蜜桃在线观看| 精品电影一区二区三区| 亚洲国产精品影院| 国产丶欧美丶日本不卡视频| 欧美精品久久一区二区三区 |