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

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

?? atapi.c

?? smdk2443_wince50 embedd
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "atapi.h"
#include "defines.h"
#include <windows.h>
#include "atadisk.h"
#include "system.h"


extern PDEVICE_CONTROLLER g_pcPC;
extern PDRIVE_DESC g_pdPD;
volatile S3C2443_CFCARD_REG *g_vATAPIRegs;
volatile S3C2443_MATRIX_REG *g_vEBIRegs;
volatile S3C2443_IOPORT_REG *g_vIOPORTRegs;
volatile S3C2443_INTR_REG *g_vINTRRegs;

UINT8 *g_vDmaBuffer;

UINT32 g_uCfgReg;
UINT32 g_dwATAIrq = IRQ_CFCON;
UINT32 g_dwATASysIrq;

ATA_DEV_INFO g_oDevice[2];
ATA_MODE g_eMode;


CRITICAL_SECTION        g_ControllerCriticalSection;     // controller critical section 

HANDLE g_hATAEvent;

#ifdef USE_MUTEX
static HANDLE g_hMutex;

HANDLE InitMutex(LPCTSTR name)
{
   HANDLE hMutex;
   
   hMutex = CreateMutex (
            NULL,                             // No security attributes
            FALSE,                            // Initially not owned
            name);  // Name of mutex object
   
   if (NULL == hMutex)
   {
      // Your code to deal with the error goes here.
      RETAILMSG(1, (_T("[DRVLIB]Cann't initialize mutex %s\r\n"),name));
   }
   
   return hMutex;
}

DWORD GetMutex(HANDLE handle)
{
   DWORD result;

   result = WaitForSingleObject( handle, INFINITE);
   
   switch(result)
   {
      case WAIT_OBJECT_0:
         break;
      case WAIT_TIMEOUT:
         RETAILMSG(1, (_T("[DRVLIB]ERROR:Mutex Timeout\r\n")));
         break;
      case WAIT_ABANDONED:
         RETAILMSG(1, (_T("[DRVLIB]ERROR:Mutex abandoned\r\n")));
         break;
      default:
         RETAILMSG(1, (_T("[DRVLIB]ERROR:others\r\n")));
         break;
   }
   return result;
}
#endif // USE_MUTEX

int AtapiRegisterInit(void) /*__fn__*/
{

	int RetValue=TRUE;
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : Before Entering OpenMedia()\r\n")));	

#ifdef USE_MUTEX
	g_hMutex = InitMutex(TEXT("SSMCBusMutex"));
#endif// USE_MUTEX

        InitializeCriticalSection(&g_ControllerCriticalSection);
	g_vATAPIRegs= (volatile S3C2443_CFCARD_REG *)VirtualAlloc(0, sizeof(S3C2443_CFCARD_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (g_vATAPIRegs == NULL) 
	{
		RETAILMSG(1,(TEXT("For g_vATAPIRegs : VirtualAlloc failed! error code %d\r\n"),GetLastError()));
		RetValue = FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)g_vATAPIRegs, (PVOID)(S3C2443_BASE_REG_PA_CFCARD>>8),
			sizeof(S3C2443_CFCARD_REG),  PAGE_PHYSICAL |PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			RETAILMSG(1,(TEXT("For INTRregs: VirtualCopy failed!ATAPI\r\n")));
			RetValue = FALSE;
		}
	}

	g_vIOPORTRegs= (volatile S3C2443_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2443_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (g_vIOPORTRegs == NULL) 
	{
		RETAILMSG(1,(TEXT("For g_vATAPIRegs : VirtualAlloc failed! error code %d\r\n"),GetLastError()));
		RetValue = FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)g_vIOPORTRegs, (PVOID)(S3C2443_BASE_REG_PA_IOPORT>>8),
			sizeof(S3C2443_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			RETAILMSG(1,(TEXT("For INTRregs: VirtualCopy failed IOPORT!\r\n")));
			RetValue = FALSE;
		}
	}    


	g_vDmaBuffer = (UINT8 *)VirtualAlloc(0, PIODMA_BUFFER_SIZE, MEM_RESERVE, PAGE_NOACCESS);
	if (g_vDmaBuffer == NULL) 
	{
		RETAILMSG(RTL_MSG,(TEXT("For g_vDmaBuffer : VirtualAlloc failed! error code %d\r\n"),GetLastError()));
		RetValue = FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)g_vDmaBuffer, (PVOID)(PIODMA_BUFFER_PA>> 8),
			PIODMA_BUFFER_SIZE, PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			RETAILMSG(1,(TEXT("For g_vDmaBuffer: VirtualCopy failed!\r\n")));
			RetValue = FALSE;
		}
	}	

	g_vEBIRegs = (volatile S3C2443_MATRIX_REG *)VirtualAlloc(0, sizeof(S3C2443_MATRIX_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (g_vEBIRegs == NULL) 
	{
		RETAILMSG(1,(TEXT("For g_vATAPIRegs : VirtualAlloc failed error code %d\r\n"),GetLastError()));
		return FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)g_vEBIRegs, (PVOID)(S3C2443_BASE_REG_PA_MATRIX>> 8),
			sizeof(S3C2443_MATRIX_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			RETAILMSG(1,(TEXT("For INTRregs: VirtualCopy failed EBI!\r\n")));
			return FALSE;
		}
	}
	g_vINTRRegs = (volatile S3C2443_INTR_REG *)VirtualAlloc(0, sizeof(S3C2443_INTR_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (g_vINTRRegs == NULL) 
	{
		RETAILMSG(1,(TEXT("For g_vINTRRegs : VirtualAlloc failed error code %d\r\n"),GetLastError()));
		return FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)g_vINTRRegs, (PVOID)(S3C2443_BASE_REG_PA_INTR>> 8),
			sizeof(S3C2443_INTR_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			RETAILMSG(1,(TEXT("For g_vINTRRegs: VirtualCopy failed EBI!\r\n")));
			return FALSE;
		}
	}
       g_vEBIRegs->EBICON |=  (1<<10)|(1<<9); 
       g_vIOPORTRegs->GPGCON |= (3<<30)|(3<<28)|(3<<26)|(3<<24)|(3<<22);
#ifdef __EVT1
	  g_vIOPORTRegs->GPADAT = 0x1aa8a; // GPA10 RDATA_OEN setting
#else
	 g_vIOPORTRegs->GPACON |= (1<<27)|(1<<11)|(1<<14)|(1<<13);// nWE_CF,nOE_CF,nRCS3,nRCS2 enable //S3C2443X01
#endif
	g_vIOPORTRegs->MISCCR &=(~(1<<30)); // card detect when card is detected ,the bit should be '0'.
	
        g_vATAPIRegs->MUX_REG = 0x07;
        Sleep(2);
        g_vATAPIRegs->MUX_REG = 0x03;
        Sleep(2);
        g_vATAPIRegs->MUX_REG = 0x01;
        Sleep(500);

        g_vATAPIRegs->ATA_PIO_TIME = 0x1c238;
        g_vATAPIRegs->ATA_UDMA_TIME = 0x20B1362 ; 

	RETAILMSG(RTL_MSG,(TEXT("### 1.EBI_BANK_CFG : 0x%x\r\n"),g_vEBIRegs->EBICON));
 	RETAILMSG(RTL_MSG,(TEXT("### 2.EBI_BANK_CFG : 0x%x\r\n"),g_vEBIRegs->EBICON));
 	RETAILMSG(RTL_MSG,(TEXT("### 3.ATA_PIO_TIME : 0x%x\r\n"),g_vATAPIRegs->ATA_PIO_TIME));    
     	RETAILMSG(RTL_MSG,(TEXT("### 4.MUX REG : 0x%x\r\n"),g_vATAPIRegs->MUX_REG));    
 	RETAILMSG(RTL_MSG,(TEXT("### 5.ATA_PIO_TIME : 0x%x\r\n"),&(g_vATAPIRegs->ATA_PIO_TIME)));    
     	RETAILMSG(RTL_MSG,(TEXT("### 6.MUX REG : 0x%x\r\n"),&(g_vATAPIRegs->MUX_REG)));    
      	RETAILMSG(RTL_MSG,(TEXT("### 7.GPIO REG : 0x%x\r\n"),&(g_vIOPORTRegs->GPACON)));    
      	RETAILMSG(RTL_MSG,(TEXT("### 8.SIZE OF CF REG : 0x%x\r\n"),sizeof(S3C2443_CFCARD_REG)));            


	return RetValue;
}

int InitInterrupt(void)
{
    RETAILMSG(1, (TEXT("ATA_INIT : IOCTL_HAL_REQUEST_SYSINTR \r\n")));
    g_hATAEvent = CreateEvent(NULL, FALSE, FALSE, NULL);   
    g_vATAPIRegs->ATA_IRQ_MASK = 0xffffffff;
    g_vATAPIRegs->ATA_IRQ = 0xff;    
    //g_vATAPIRegs->ATA_IRQ_MASK &= ~(1<<2);
    
    if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_dwATAIrq, sizeof(UINT32), &g_dwATASysIrq, sizeof(UINT32), NULL))
    {
        RETAILMSG(1, (TEXT("ERROR: ATA_INIT: Failed to request sysintr value for power button interrupt.\r\n")));
        return FALSE;
    }
    RETAILMSG(1,(TEXT("INFO: ATA_INIT: Mapped Irq 0x%x to SysIntr 0x%x.\r\n"), g_dwATAIrq, g_dwATASysIrq));
    if ( g_vINTRRegs->SRCPND & (1<<IRQ_CFCON) )
    {
        RETAILMSG(1,(TEXT("CF SRCPND has already been set.\r\n")));
        g_vINTRRegs->SRCPND = (1<<IRQ_CFCON) ;
    }

    if ( g_vINTRRegs->INTPND & (1<<IRQ_CFCON) )
    {
        RETAILMSG(1,(TEXT("CF INTPND has already been set.\r\n")));
        g_vINTRRegs->INTPND = (1<<IRQ_CFCON) ;
    }

    if (!(InterruptInitialize(g_dwATASysIrq, g_hATAEvent, 0, 0))) 
    {
        RETAILMSG(1, (TEXT("ERROR: ATA_INIT: Interrupt initialize failed.\r\n")));
        return FALSE;
    }        

    if ( g_vINTRRegs->SRCPND & (1<<IRQ_CFCON) )
    {
        RETAILMSG(1,(TEXT("CF SRCPND has already been set22.\r\n")));
        g_vINTRRegs->SRCPND = (1<<IRQ_CFCON) ;
    }

    if ( g_vINTRRegs->INTPND & (1<<IRQ_CFCON) )
    {
        RETAILMSG(1,(TEXT("CF INTPND has already been set22.\r\n")));
        g_vINTRRegs->INTPND = (1<<IRQ_CFCON) ;
    }

    return 1;    
}
    


int AtapiDeviceInit(void)
{

	int i;
	
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : Check point 1 ()\r\n")));		
        g_pcPC->mode = FALSE;
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : Check point 2 ()\r\n")));		
        g_pcPC->register_file_address = 0x0;

        /* Get the drive structure infomation */
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : Check point 3 ()\r\n")));		
        g_pcPC->drive = g_pdPD;

	//RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : Check point 4 ()\r\n")));		
        g_pcPC->drive->features = FALSE;
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : Check point 5 ()\r\n")));				
        g_pcPC->drive->total_lba = 0L;
		
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : Before Entering AtapiregisterInit()\r\n")));
	if ( !AtapiRegisterInit() )
		return FALSE;

    #if 1
       if (!InitInterrupt())
            return FALSE;
    #endif
    
        #if 0
	if (!(OpenMedia(PIO_DMA)))
		return FALSE;
        #else
	if (!(OpenMedia()));   
            return TRUE;
       #endif
}

int GetDataFromDevice(UINT16 *data) 
{
	UINT32 tempRead;

	if (!(WaitForDeviceAccessReady()))
		return FALSE;
	//Inp32(ATA_PIO_DTR, tempRead);
	tempRead = g_vATAPIRegs->ATA_PIO_DTR;
	if (!(WaitForDeviceAccessReady()))
		return FALSE;
	//Inp32(ATA_PIO_RDATA, tempRead);
	tempRead = g_vATAPIRegs->ATA_PIO_RDATA;
	*data = (UINT16)(tempRead&0xFFFF);
	return TRUE;
}

void GetByteDataFromDevice(UINT8 *data) 
{
	UINT32 tempRead;

	WaitForDeviceAccessReady();
	//Inp32(ATA_PIO_DTR, tempRead);
	tempRead = g_vATAPIRegs->ATA_PIO_DTR;
	WaitForDeviceAccessReady();
	//Inp32(ATA_PIO_RDATA, tempRead);
	tempRead = g_vATAPIRegs->ATA_PIO_RDATA;
	*data = (UINT8)(tempRead&0xFF);
	*(data+1)=(UINT8)((tempRead>>8)&0xFF);
}



int ReadDeviceReg(volatile UINT32 *nRegister, UINT8 *data) 
{
	UINT32 tempRead;

	if (!(WaitForDeviceAccessReady()))
		return FALSE;
	//Inp32(nRegister, tempRead);
	tempRead = *nRegister;
	if (!(WaitForDeviceAccessReady()))
		return FALSE;
	//Inp32(ATA_PIO_RDATA, tempRead);
	tempRead = g_vATAPIRegs->ATA_PIO_RDATA;
	*data = (UINT8)(tempRead&0xFF);
	return TRUE;
	}

int WaitForNoBusyStatus(void)
{
	UINT8 tempRead;
	UINT32 count=1;
	UINT16 retVal=TRUE;

		RETAILMSG(RTL_MSG,(TEXT("+++ 1.Atapi status reg 0x%x\r\n"),g_vATAPIRegs->ATA_PIO_RDATA));
	while(1) 
	{
		count++;
		if (!(ReadDeviceReg(DEV_ALTANATE, &tempRead)))
		{
			return FALSE;
		}
		if (!(ReadDeviceReg(DEV_STATUS, &tempRead)))
		{
          return FALSE;			
		}
		//if (count%1000000 == 0 )
			//RETAILMSG(RTL_MSG,(TEXT("+++ 2.Atapi status reg 0x%x\r\n"),g_vATAPIRegs->ATA_PIO_RDATA));
		if((tempRead&STATUS_DEVICE_BUSY_1) == 0) 
			break;
		if(count == 10000000 )
		{
			retVal = FALSE;
			break;
		}
	}
	return retVal;
}


int WaitForDeviceAccessReady(void)
{
	UINT32 tempRead;
	UINT8  retVal=TRUE;
	UINT32 count=1;

	do {
		//Inp32(ATA_FIFO_STATUS, tempRead); // modified by Bryan W. Lee (Oct.19th, 2005)
		if ( count == 10000000)
		{
			retVal=FALSE;
			RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : WaitForDeviceAccessReady error..\r\n")));	
			break;
		}
		count++;
		tempRead = g_vATAPIRegs->ATA_FIFO_STATUS;
	} while((tempRead>>28)!=0);
	return retVal;
}


int WriteOnTaskFileReg(volatile UINT32 *nRegister,UINT32 nValue) 
{

	if (!(WaitForDeviceAccessReady()))
		return FALSE;
	*nRegister  = nValue; // write register 
	return TRUE;
}


int IdentifyDevice(void) 
{
	UINT16 readBuffer[256]={0,};
	UINT8 tempBuffer;
	UINT8 *tempString;
	UINT32 tBuf[4];
	short i;
	
	
	
	g_uCfgReg |= (0x40); 
	g_vATAPIRegs->ATA_CFG = g_uCfgReg; // set Big endian (must be)

	g_vATAPIRegs->ATA_IRQ_MASK = 0xffffffff;
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : IdentifyDevice() check point 1.\r\n")));		
	if (!(WriteOnTaskFileReg(DEV_DEVICE, 0x40)))
		return FALSE;
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : IdentifyDevice() check point 2.\r\n")));			
	if (!(WriteOnTaskFileReg(DEV_STATUS, IDENTIFYDEVICE)))
		return FALSE;

	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : IdentifyDevice() check point 3.\r\n")));	
	if (!(WaitForNoBusyStatus()))
		return FALSE;
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : IdentifyDevice() check point 4.\r\n")));		
	for(i=0; i<ATA_SECTORSIZE/2; i++) {
		GetDataFromDevice(&readBuffer[i]);
//		DbgAta(("DATA : 0x%04X\n",readBuffer[i]));
	}
	RETAILMSG(RTL_MSG, (TEXT("+++ ATAPI_CF : IdentifyDevice() check point 5.\r\n")));			
	if (!(WaitForNoBusyStatus()))
		return FALSE;
	//
	//verify identify data~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	tempString = (UINT8 *)&readBuffer[10];
	
//	for(i=0;i<20;i++) DbgAta(("%c",*(tempString+i)));

//	tempString = (UINT8 *)&readBuffer[27];
	RETAILMSG(INFO_MSG,(TEXT("\r\nModel Number :")));
	for(i=0;i<10;i++) RETAILMSG(INFO_MSG,(TEXT("%c"),*((UINT8 *)tempString+i)));

	for(i=0;i<10;i++) 
		RETAILMSG(RTL_MSG,(TEXT("%c"),*((UINT8 *)tempString+i)));
	
	for(i=0;i<4;i++) RETAILMSG(INFO_MSG,(TEXT("%c"),*((UINT8 *)tempString+26+i)));
	for(i=0;i<20;i++) RETAILMSG(INFO_MSG,(TEXT("%c"),*((UINT8 *)tempString+34+i)));

	tBuf[0] = (UINT8)(readBuffer[61]&0xff);
	tBuf[1] = (UINT8)((readBuffer[61]&0xff00)>>8);
	tBuf[2] = (UINT8)(readBuffer[60]&0xff);
	tBuf[3] = (UINT8)((readBuffer[60]&0xff00)>>8);

	g_oDevice[0].MaxSectors = (UINT32)((tBuf[0]<<24)|(tBuf[1]<<16)|(tBuf[2]<<8)|tBuf[3]);
	g_pcPC->drive->total_lba = g_oDevice[0].MaxSectors;
	RETAILMSG(INFO_MSG,(TEXT("\nMax Sectors : %d\n"),g_oDevice[0].MaxSectors));

	g_pcPC->drive->num_cylinders = readBuffer[54];
	RETAILMSG(INFO_MSG,(TEXT("cylinders : %d\n"),g_pcPC->drive->num_cylinders));

	g_pcPC->drive->num_heads = readBuffer[55];
	RETAILMSG(INFO_MSG,(TEXT("head : %d\n"),g_pcPC->drive->num_heads));	
	g_pcPC->drive->sec_p_track = readBuffer[56];
	RETAILMSG(INFO_MSG,(TEXT("sec_p_track : %d\n"),g_pcPC->drive->sec_p_track));	
	
	// Caution: readBuffer[x] - Big Endian, so upper byte means LSB..
	g_oDevice[0].MaxMultiple= (readBuffer[47]>>8)&0xFF;
	RETAILMSG(INFO_MSG,(TEXT("\nMax Multiple : %02X\n"),g_oDevice[0].MaxMultiple));
	if (readBuffer[59]&0x1) { //multiple sector setting is valid
		g_oDevice[0].CurrentMultiple= (readBuffer[59]>>8)&0xFF;
		//DbgAta(("Current Multiple : %03X\n",g_oDevice[0].CurrentMultiple));
	}
	
	if (((readBuffer[64]>>8)&0x3) == 1) g_oDevice[0].MaxPioMode = PIO3;
	else if (((readBuffer[64]>>8)&0x3) == 3) g_oDevice[0].MaxPioMode = PIO4;
	else g_oDevice[0].MaxPioMode = PIO2;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久综合| 制服.丝袜.亚洲.另类.中文 | 久久新电视剧免费观看| 91麻豆免费观看| 麻豆精品精品国产自在97香蕉| 中文字幕日本乱码精品影院| 欧美一二三区在线| 欧美伊人久久大香线蕉综合69| 国产激情精品久久久第一区二区| 日韩精品视频网| 亚洲一区av在线| 亚洲欧美日韩国产另类专区| 国产日韩欧美电影| 精品精品欲导航| 91精品久久久久久久91蜜桃| 欧美专区日韩专区| jlzzjlzz欧美大全| 波波电影院一区二区三区| 久久99精品网久久| 日韩精品一级二级 | 亚洲视频资源在线| 日韩丝袜情趣美女图片| 欧美三级视频在线| 色综合久久天天| 成人av影视在线观看| 国产精品一线二线三线| 九九精品视频在线看| 麻豆国产欧美日韩综合精品二区 | 色综合久久88色综合天天免费| 国产在线精品视频| 久久69国产一区二区蜜臀| 日本中文一区二区三区| 日本一道高清亚洲日美韩| 亚洲精品久久久久久国产精华液| 中文字幕亚洲不卡| 自拍偷拍国产亚洲| 亚洲色大成网站www久久九九| 日本一区二区三区电影| 久久精品亚洲乱码伦伦中文| 精品va天堂亚洲国产| 日韩欧美亚洲一区二区| 日韩欧美第一区| 久久免费偷拍视频| 中文字幕第一区第二区| 国产精品国产三级国产普通话蜜臀 | 色婷婷久久久久swag精品| 99久久国产综合精品麻豆 | 在线成人小视频| 欧美福利视频一区| 精品免费99久久| 久久精品欧美一区二区三区不卡 | 亚洲欧洲制服丝袜| 一区二区三区四区不卡视频| 亚洲gay无套男同| 免费看精品久久片| 国产一区二区三区四| 国产91精品欧美| 色综合一个色综合| 欧美午夜电影网| 日韩一区和二区| 国产欧美日韩卡一| 一区二区三区毛片| 全部av―极品视觉盛宴亚洲| 国产自产2019最新不卡| 99热精品国产| 欧美另类久久久品| 久久久电影一区二区三区| 日韩毛片在线免费观看| 亚洲成a人v欧美综合天堂下载| 日韩成人dvd| 高清在线成人网| 欧美日韩中文字幕一区二区| 日韩欧美黄色影院| 最新不卡av在线| 免费看欧美女人艹b| 波多野结衣在线aⅴ中文字幕不卡| 日本久久电影网| 久久伊人蜜桃av一区二区| 亚洲欧美中日韩| 视频在线在亚洲| 日韩欧美一区二区在线视频| 欧美精品一区在线观看| 亚洲色图丝袜美腿| 理论电影国产精品| 91免费精品国自产拍在线不卡| 欧美日本韩国一区| 中文字幕欧美三区| 婷婷综合五月天| 成人精品鲁一区一区二区| 欧美日韩午夜精品| 国产精品久久午夜| 久久精品国产亚洲一区二区三区| 国产不卡在线播放| 91麻豆精品国产自产在线观看一区| 日本一区二区三区高清不卡| 日韩精品一级中文字幕精品视频免费观看| 国产盗摄一区二区三区| 欧美日韩国产区一| 一区精品在线播放| 黑人巨大精品欧美一区| 欧美在线免费播放| 国产精品久久久久影视| 国产在线精品国自产拍免费| 欧美日韩国产首页| 亚洲天堂av老司机| 高清不卡一区二区在线| 日韩欧美国产综合在线一区二区三区 | 成人免费看黄yyy456| 日韩一级在线观看| 性做久久久久久久免费看| 97se亚洲国产综合自在线| 久久久一区二区三区捆绑**| 男男视频亚洲欧美| 欧美精品欧美精品系列| 亚洲国产成人va在线观看天堂| 成人aaaa免费全部观看| 国产校园另类小说区| 麻豆成人在线观看| 538在线一区二区精品国产| 亚洲一区二区三区不卡国产欧美 | 欧美午夜片在线看| 中文字幕一区二区三| 国产成人综合亚洲91猫咪| 精品久久国产老人久久综合| 日本系列欧美系列| 在线不卡的av| 三级亚洲高清视频| 欧美日韩亚洲丝袜制服| 午夜在线成人av| 在线视频国产一区| 亚洲综合色婷婷| 欧美午夜片在线看| 午夜一区二区三区视频| 欧美日韩一区二区三区视频| 亚洲自拍偷拍图区| 欧美日韩高清在线播放| 性做久久久久久久免费看| 欧美日韩二区三区| 奇米777欧美一区二区| 69久久99精品久久久久婷婷| 婷婷综合另类小说色区| 欧美一级午夜免费电影| 青青草97国产精品免费观看| 欧美一级在线免费| 国产呦萝稀缺另类资源| 中文文精品字幕一区二区| 成a人片亚洲日本久久| 亚洲精品福利视频网站| 欧美日本一区二区三区四区| 美女被吸乳得到大胸91| 国产性做久久久久久| 99久久婷婷国产精品综合| 麻豆传媒一区二区三区| 国产三级精品视频| 91免费视频网| 免费在线看一区| 久久精品亚洲精品国产欧美kt∨| 成人激情免费电影网址| 亚洲中国最大av网站| 日韩欧美综合一区| 成人午夜电影小说| 亚洲成人av福利| 26uuu国产在线精品一区二区| 岛国精品在线观看| 亚洲综合小说图片| 日韩精品一区二区三区视频播放 | 国产偷国产偷亚洲高清人白洁| 成人一区二区三区| 一区二区三区**美女毛片| 日韩一区二区在线观看视频| 国产成人av福利| 亚洲成人久久影院| 精品99999| 在线影院国内精品| 国产一区二区三区四| 亚洲精品免费电影| 精品动漫一区二区三区在线观看| 波多野结衣中文字幕一区| 日本不卡不码高清免费观看| 中文一区一区三区高中清不卡| 91搞黄在线观看| 国产成人在线影院| 日精品一区二区三区| 国产精品青草久久| 日韩你懂的在线播放| 色综合久久综合网欧美综合网| 九九久久精品视频 | 成熟亚洲日本毛茸茸凸凹| 一二三区精品视频| 国产日韩综合av| 91精品国产色综合久久久蜜香臀| 成人免费av在线| 久久国产尿小便嘘嘘尿| 亚洲一二三区不卡| 国产精品久久综合| 精品理论电影在线观看| 欧美日韩黄色一区二区| 91亚洲精品乱码久久久久久蜜桃| 久久精品国产精品青草| 视频一区中文字幕国产|