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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smc.c

?? ATMEL 89c51sndc mp3外接硬盤源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*C**************************************************************************
* NAME:         smc.c
*----------------------------------------------------------------------------
* Copyright (c) 2002 Atmel.
*----------------------------------------------------------------------------
* RELEASE:      snd1c-demo-hdd-0_2_0      
* REVISION:     1.5     
*----------------------------------------------------------------------------
* PURPOSE:
* This file contains the high level SMC routines
*****************************************************************************/

/*_____ I N C L U D E S ____________________________________________________*/

#include "config.h"                         /* system configuration */
#include "lib_demob\board.h"                /* board definition */
#include "lib\usb\usb_drv.h"                /* usb driver definition */
#include "lib_mem\smc\smc.h"                /* SMC definition */

/*_____ M A C R O S ________________________________________________________*/


/*_____ D E F I N I T I O N ________________________________________________*/

xdata Byte smc_send_cmd At(SMC_CMD_LATCH_ENABLE_ADD); /* Command */
xdata Byte smc_send_add At(SMC_ADD_LATCH_ENABLE_ADD); /* Address */
xdata Byte volatile smc_data At(SMC_ADDRESS_CMD_DATA);/* Data    */

/* Card Identification System definition */
code Byte smc_cis_table[]=
  {
  0x01, 0x03, 0xD9, 0x01, 0xFF, 0x18, 0x02, 0xDF, 0x01, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x21,
  0x02, 0x04, 0x01, 0x22, 0x02, 0x01, 0x01, 0x22, 0x03, 0x02, 0x04, 0x07, 0x1A, 0x05, 0x01, 0x03,
  0x00, 0x02, 0x0F, 0x1B, 0x08, 0xC0, 0xC0, 0xA1, 0x01, 0x55, 0x08, 0x00, 0x20, 0x1B, 0x0A, 0xC1,
  0x41, 0x99, 0x01, 0x55, 0x64, 0xF0, 0xFF, 0xFF, 0x20, 0x1B, 0x0C, 0x82, 0x41, 0x18, 0xEA, 0x61,
  0xF0, 0x01, 0x07, 0xF6, 0x03, 0x01, 0xEE, 0x1B, 0x0C, 0x83, 0x41, 0x18, 0xEA, 0x61, 0x70, 0x01,
  0x07, 0x76, 0x03, 0x01, 0xEE, 0x15, 0x14, 0x05, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x30, 0x2E, 0x30, 0x00, 0xFF, 0x14, 0x00, 0xFF, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  };

/* ECC definition */
code Byte smc_ecc_table[]=
  {
  0x00,0x55,0x56,0x03,0x59,0x0C,0x0F,0x5A,0x5A,0x0F,0x0C,0x59,0x03,0x56,0x55,0x00,
  0x65,0x30,0x33,0x66,0x3C,0x69,0x6A,0x3F,0x3F,0x6A,0x69,0x3C,0x66,0x33,0x30,0x65,
  0x66,0x33,0x30,0x65,0x3F,0x6A,0x69,0x3C,0x3C,0x69,0x6A,0x3F,0x65,0x30,0x33,0x66,
  0x03,0x56,0x55,0x00,0x5A,0x0F,0x0C,0x59,0x59,0x0C,0x0F,0x5A,0x00,0x55,0x56,0x03,
  0x69,0x3C,0x3F,0x6A,0x30,0x65,0x66,0x33,0x33,0x66,0x65,0x30,0x6A,0x3F,0x3C,0x69,
  0x0C,0x59,0x5A,0x0F,0x55,0x00,0x03,0x56,0x56,0x03,0x00,0x55,0x0F,0x5A,0x59,0x0C,
  0x0F,0x5A,0x59,0x0C,0x56,0x03,0x00,0x55,0x55,0x00,0x03,0x56,0x0C,0x59,0x5A,0x0F,
  0x6A,0x3F,0x3C,0x69,0x33,0x66,0x65,0x30,0x30,0x65,0x66,0x33,0x69,0x3C,0x3F,0x6A,
  0x6A,0x3F,0x3C,0x69,0x33,0x66,0x65,0x30,0x30,0x65,0x66,0x33,0x69,0x3C,0x3F,0x6A,
  0x0F,0x5A,0x59,0x0C,0x56,0x03,0x00,0x55,0x55,0x00,0x03,0x56,0x0C,0x59,0x5A,0x0F,
  0x0C,0x59,0x5A,0x0F,0x55,0x00,0x03,0x56,0x56,0x03,0x00,0x55,0x0F,0x5A,0x59,0x0C,
  0x69,0x3C,0x3F,0x6A,0x30,0x65,0x66,0x33,0x33,0x66,0x65,0x30,0x6A,0x3F,0x3C,0x69,
  0x03,0x56,0x55,0x00,0x5A,0x0F,0x0C,0x59,0x59,0x0C,0x0F,0x5A,0x00,0x55,0x56,0x03,
  0x66,0x33,0x30,0x65,0x3F,0x6A,0x69,0x3C,0x3C,0x69,0x6A,0x3F,0x65,0x30,0x33,0x66,
  0x65,0x30,0x33,0x66,0x3C,0x69,0x6A,0x3F,0x3F,0x6A,0x69,0x3C,0x66,0x33,0x30,0x65,
  0x00,0x55,0x56,0x03,0x59,0x0C,0x0F,0x5A,0x5A,0x0F,0x0C,0x59,0x03,0x56,0x55,0x00
  };


/*_____ D E C L A R A T I O N ______________________________________________*/
extern  data    Uint32  gl_ptr_mem;               /* memory data pointer */
extern  pdata   Byte    gl_buffer[];
extern  bdata   bit     gl_mem_failure;           /* memory hardware failure*/

data  Uint32 smc_current_physical_sector_addr;    /* give the address of the current sector     */  
data  Uint32 gl_address;                          /* general address variable                   */
data  Uint16 smc_look_up_table_block;             /* look up table address (block)              */
data  Byte smc_zone;                              /* current zone number                        */
data  Byte smc_gl_buf_idx;
data  Byte smc_gl_buf_free_idx ;

bdata bit smc_block_used;                         /* Set when a block was used                  */
bdata bit smc_busy;                               /* indicate that nand flash is busy           */
bdata bit smc_64;                                 /* indicate that memory capacity >= 64Mb      */
bdata bit smc_lut_modified;                       /* indicate that LUT have been modified       */

xdata Uint32 smc_disk_size;                       /* Size of the disk in sector - 1             */ 
xdata Uint16 smc_logical_block;                   /* Current logical block value                */
xdata Uint16 smc_lut_block[SMC_ZONE_MAX];         /* LUT address (block value)                  */
xdata Uint16 smc_buf_free[24];                    /* contain free physical block address        */
xdata Uint16 smc_spare_block;                     /* number of free block                       */
xdata Uint16 smc_block_to_be_deleted;             /* give the address of the next deleted block */
xdata Uint16 smc_block_min;                       /* address of the first block in the buffer   */
xdata Uint16 smc_block_max;                       /* address of the last block in the buffer    */
xdata Union16 smc_buf[SMC_BUFFER_SIZE];           /* Buffer for write operation                 */
xdata Byte smc_old_zone;                          /* for zone change                            */  
xdata Byte smc_zone_max;                          /* max zone number (from 1 to 8)              */
xdata Byte smc_device_type;                       /* Give the size of device in Mbytes          */ 
xdata Byte smc_lut_index[SMC_ZONE_MAX];           /* give the index for updating LUT            */
xdata Byte smc_spare_block_number[SMC_ZONE_MAX];  /* Number of free spare block in each zone  */


idata Uint16  gl_cpt_page;                        /* internal page counter (byte access)        */
idata Byte smc_gl_buf_idx_max;                    /* max index for updating LUT                 */

/* ECC variable */
xdata Byte ecc1, ecc2, ecc3;
xdata Byte ecc[6];


/*F**************************************************************************
* NAME: read_spare_byte
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*   read spare data byte and construct the look up table.
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void read_spare_byte(void)
{
data  Uint16 block;
data  Uint16 j;           /* counter */
data  Uint16 i;           /* counter */
bit   block_valid;
xdata Uint32 temp_address;              
xdata Byte byte_0, byte_5, byte_6;
xdata Uint16 free_bloc_pos;
xdata Uint16 last_physical_used_block[SMC_ZONE_MAX]; /* Last physical block used     */
xdata Uint16 start;       /* start value for the construction of the LUT */
xdata Uint16 end;         /* final value */
xdata Union16 block2;

  Smc_CS_ON();
  Smc_wait_busy();
  /* Global media initialization */
  smc_block_min       = 0xFFFF;         /* Starting buffer value    */
  smc_gl_buf_idx_max  = 0;              /* Max index in the buffer  */
  smc_lut_modified    = FALSE;          /* Buffer change flag       */
  smc_gl_buf_idx      = 0;              /* Main buffer index        */
  smc_gl_buf_free_idx = 0;              /* Free physical buffer idx */
  smc_old_zone     = 0xFF;           /* Previous zone number     */
  for (i = 0; i < smc_zone_max; i++)
  {
    smc_lut_index[i] = 0;               /* LUT index                */
  }

  /***************************************************/
  /* For each zone, this following lines :           */
  /*   Search bad block                              */
  /*   Determine if a LUT is present                 */
  /*   Determine the last physical block             */ 
  /***************************************************/
  gl_address = 0;                                      /* Start from physical sector 0 */
  for (i = 0; i < smc_zone_max; i++)                 /* for each zone */
  {
    smc_spare_block_number[i] = 23;                  /* Initialize the spare block table */
    last_physical_used_block[i] = (Uint16)(i) << 10;/* Initialize the last used physical block value */

    for (j = SMC_BLOCK_PER_ZONE; j != 0; j--)        /* for each block */ 
    {
      Smc_read_open_C_area(gl_address, 0x00);
      byte_0 = Smc_rd_byte();   /* Byte 0 : User data byte */
      Smc_rd_byte();            /* Byte 1 : User data byte */
      Smc_rd_byte();            /* Byte 2 : User data byte */
      Smc_rd_byte();            /* Byte 3 :                */
      Smc_rd_byte();            /* Byte 4 :                */
      byte_5 = Smc_rd_byte();   /* Byte 5 : Block status data */
      if ( byte_5 != 0xFF )                         /* block status data : valid/invalid block */
      {
        smc_spare_block_number[i]--;                 /* Defect block */
      }
      else                                          /* Block is valid */
      {
                                                    /* Determine is the block is a specific block */
        byte_6 = Smc_rd_byte();
        if (  (byte_6 == 0x00) ||                                   /* 0x00 = specific block */
              ( (byte_6 != 0xFF) && ( (byte_6 & 0xF8) != 0x10 ) &&  /* Value in redundant spare area not correct */
                (byte_6 != 0xE8) )                                  /* Don't care about LUT block */
           )
        { 
          smc_spare_block_number[i]--;               /* specific or invalid block */
        }
        else
        {
          /* Determine if the block is the look up table */ 
          if (byte_6 == 0xE8)                       /* look up table ? */
          {
            smc_block_erase(gl_address);
          }
          /* Determine the last physical used block */
          if ( (byte_6 & 0xF8) == 0x10)             /* Used block  */
          {
            last_physical_used_block[i] = gl_address >> 5;
          }
        }

      }
      gl_address += 32;
    }
  }

  /*****************************************************************/
  /*          Find free physical block for LUT for each zone       */
  /*****************************************************************/
  for (i = 0; i < smc_zone_max; i++)
  {
    block = last_physical_used_block[i];
    start = (Uint16)(i) << 10;          /* starting value for each zone */
    if (block == start)                 /* starting block for scan      */
    {
      block = start + 1023;
    }
    block_valid = FALSE;                /* init flag block valid */
    Smc_wait_busy();
    do
    {
      gl_address = (Uint32)(block) << 5;
      Smc_read_open_C_area(gl_address, 0x05);
      byte_5 = Smc_rd_byte();
      byte_6 = Smc_rd_byte();

      if ( (byte_5 == 0xFF) && (byte_6 == 0xFF) ) /* not assigned and valid block */
      {
        block_valid = TRUE;                       /* find a correct block         */
      }
      else                                        /* else decrease block number   */
      {
        if (block == start)                       
        {
          block = start + 1023;
        }
        else
        {
          block--;
        }
      }
    }
    while ( !block_valid  );

    smc_lut_block[i] = block;                         /* Update look up table address */
  }
  
    
  
  /**********************************************************/
  /* Create the look-up table                               */
  /* Process is done zone per zone and by step of 256 blocks*/
  /* ********************************************************/
  for (smc_zone = 0; smc_zone < smc_zone_max; smc_zone++)         /* for each zone */
  {
    start = 0x00;
    end   = 0x80;     /* 256 bytes for gl_buffer <-> 128 blocks */                            
    free_bloc_pos = (Uint16)(last_physical_used_block[smc_zone]);
    gl_address       = (Uint32)(smc_lut_block[smc_zone]) << 5;        
    do
    {
      smc_init_buffer();                          /* Reinitialize the buffer            */
      temp_address = (Uint32)(smc_zone) << 15;    /* We start at the beginning          */
      block    = (Uint16)(smc_zone) << 10;
      Smc_wait_busy();
      for (j = SMC_BLOCK_PER_ZONE; j != 0 ; j--)  /* for each block                     */
      { 
        Smc_read_open_C_area(temp_address, 0x05);
        byte_5 = Smc_rd_byte();                   /* Block status byte                  */
        if (byte_5 == 0xFF)                       /* If not a bad block                 */
        {
          block2.b[0] = Smc_rd_byte();            /* Read logical block address         */
          block2.b[1] = Smc_rd_byte();
          if ( (block2.b[0] & 0xF8) == 0x10)
          {
            
            block2.w = (block2.w & 0x0FFF) >> 1;          
            if ( (block2.w < end) && (block2.w >= start)) 
            { /* Save logical block value in the buffer */
              gl_buffer[2 * block2.b[1]] = block >> 8;
              gl_buffer[2 * block2.b[1] + 1] = block;
            }
          }
        }
        temp_address += 32; 
        block++;
      }
        
      /* affect to the free physical block a fictive logical block */
      /* free physical block => gl_buffer[x] = 0xFF */
      temp_address = (Uint32)(free_bloc_pos) << 5;
      for (i = 0; i <= 0xFE; i+=2)
      {
        if (gl_buffer[i] == 0xFF)
        {
          do                                                /* Search free physical block */
          {
            temp_address += 32;
            if (temp_address >= ((Uint32)(smc_zone + 1) << 15) )
                temp_address = (Uint32)(smc_zone) << 15;
            Smc_read_open_C_area(temp_address, 0x05);
            byte_5 = Smc_rd_byte();                          /* Invalid/Valid block */
            byte_6 = Smc_rd_byte();                          /* Used/Unused block */
          }
          while ( ( (byte_6 != 0xFF) && (byte_6 != 0xE8) ) || (byte_5 != 0xFF) );

          free_bloc_pos = temp_address >> 5;
          gl_buffer[i] = (free_bloc_pos >> 8) + 0x80;
          gl_buffer[i + 1] = free_bloc_pos;
        }
      }
  
      Smc_write_open_A_area(gl_address, 0x00);             /* Write first part of LUT */
      smc_download_buffer();                            /* Write 256 bytes from the buffer */
      Smc_send_command(SMC_PAGE_PROGRAM_CMD);           /* Valid the page programmation */
  
      smc_init_buffer();                                /* reinitialize the global buffer   */
      start    += 0x80;                                 /* process next 128 logical block   */
      end      += 0x80;
      block    = (Uint16)(smc_zone) << 10;
      temp_address = (Uint32)(smc_zone) << 15;           /* restart from the begin of zone   */
      Smc_wait_busy();  
    
      for (j = SMC_BLOCK_PER_ZONE; j != 0 ; j--)         /* for each block             */
      {
        Smc_read_open_C_area(temp_address, 0x05);
        byte_5 = Smc_rd_byte();                           /* Block status byte          */
        if (byte_5 == 0xFF)                               /* If not a bad block         */
        {
          block2.b[0] = Smc_rd_byte();                    /* Read logical block address */
          block2.b[1] = Smc_rd_byte();
          if ( (block2.b[0] & 0xF8) == 0x10)
          {
            
            block2.w = (block2.w & 0x0FFF) >> 1;          
            if ( (block2.w < end) && (block2.w >= start)) 
            { /* Save logical block value in the buffer */
              gl_buffer[2 * block2.b[1]] = block >> 8;
              gl_buffer[2 * block2.b[1] + 1] = block;
            }
          }
        }
        temp_address += 32; 
        block++;
      }
  
      temp_address = (Uint32)(free_bloc_pos) << 5;
      for (i = 0; i <= 0xFE; i += 2)
      {
        if (gl_buffer[i] == 0xFF)
        {
          do   
          {
            temp_address += 32;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级在线观看一区二区| 国产精品久久久久久亚洲伦| 亚洲第一激情av| 欧美午夜精品免费| 天天色天天操综合| 欧美一级搡bbbb搡bbbb| 精品一区二区三区免费播放| 久久视频一区二区| 国产成人激情av| 亚洲视频一二三| 在线观看免费一区| 日日摸夜夜添夜夜添国产精品| 欧美高清视频在线高清观看mv色露露十八 | 无码av免费一区二区三区试看 | 欧美日韩免费高清一区色橹橹| 亚洲sss视频在线视频| 日韩精品最新网址| 成人性生交大片免费看视频在线 | 欧洲国内综合视频| 午夜在线成人av| 久久综合国产精品| 99riav一区二区三区| 日本最新不卡在线| 久久久久久久综合狠狠综合| 色综合天天综合| 午夜电影网亚洲视频| 久久久www免费人成精品| 91社区在线播放| 久久国产日韩欧美精品| 国产精品久久国产精麻豆99网站| 在线播放中文字幕一区| 成人一区二区三区视频在线观看| 亚洲国产综合在线| 国产片一区二区| 欧美精品在线观看一区二区| 国产69精品久久99不卡| 亚洲国产中文字幕| 国产女人水真多18毛片18精品视频| 欧美在线高清视频| 国产精品一线二线三线精华| 亚洲国产一区视频| 国产精品久99| www国产精品av| 欧美午夜宅男影院| 成人午夜av电影| 麻豆精品在线播放| 亚洲精品中文在线| 欧美国产一区视频在线观看| 日韩一级片网址| 91九色最新地址| 成人国产精品视频| 黄页视频在线91| 日本成人在线网站| 亚洲国产精品欧美一二99| 国产精品电影一区二区三区| 久久综合网色—综合色88| 欧美日韩专区在线| 91免费版在线看| 成人美女视频在线观看| 激情偷乱视频一区二区三区| 三级久久三级久久| 一区二区三区不卡视频在线观看| 国产亚洲欧美激情| 日韩精品中文字幕在线一区| 欧美一区二区三级| 欧美日韩精品一区二区三区四区| 91麻豆精品在线观看| 处破女av一区二区| 国产精品88888| 国产精品99精品久久免费| 麻豆视频观看网址久久| 蜜桃视频在线观看一区| 日韩不卡一区二区| 亚洲国产欧美一区二区三区丁香婷| 亚洲日本一区二区| 中文字幕欧美一区| 亚洲欧美综合另类在线卡通| 国产精品久久久99| 18涩涩午夜精品.www| 国产精品三级视频| 成人免费小视频| 亚洲美女在线国产| 国产精品国模大尺度视频| 国产精品伦一区二区三级视频| 国产精品网曝门| 国产精品久久三| 亚洲天堂免费在线观看视频| 亚洲精品水蜜桃| 亚洲一区二区在线播放相泽| 天天做天天摸天天爽国产一区| 日韩精品三区四区| 精品亚洲欧美一区| 国产黄色成人av| 9色porny自拍视频一区二区| 91麻豆蜜桃一区二区三区| 色综合久久久久久久久| 欧美在线综合视频| 91精品福利在线一区二区三区 | 久久精品视频在线免费观看| 国产欧美一区二区精品性色| 中文字幕一区在线观看视频| 亚洲伦在线观看| 日韩精品欧美精品| 国产乱子轮精品视频| 91小视频在线观看| 欧美日韩一级大片网址| 日韩一级片网站| 国产精品日韩成人| 亚洲国产视频一区| 精品一区二区久久久| 99久久婷婷国产精品综合| 在线观看欧美精品| 26uuu色噜噜精品一区二区| 国产精品视频一二| 天天色 色综合| 成人av网站在线| 欧美日韩国产一区| 久久夜色精品一区| 伊人色综合久久天天| 蜜桃视频第一区免费观看| 成人午夜精品一区二区三区| 欧美视频三区在线播放| 久久久久久久久伊人| 午夜视频一区二区三区| 国产成人午夜视频| 精品视频资源站| 国产欧美精品日韩区二区麻豆天美| 亚洲美女一区二区三区| 韩国精品主播一区二区在线观看| 在线一区二区视频| 久久免费电影网| 视频一区欧美日韩| 波多野结衣的一区二区三区| 91精品国产乱| 亚洲精品老司机| 国产成人av福利| 欧美一区二区成人| 136国产福利精品导航| 国产在线视频一区二区| 欧美日韩另类一区| 1区2区3区精品视频| 国产乱码精品一区二区三区忘忧草| 欧美日韩一本到| 日韩久久一区二区| 国产成人亚洲精品狼色在线 | 久久综合九色综合97婷婷| 亚洲国产精品久久艾草纯爱| av在线不卡观看免费观看| 精品国产91乱码一区二区三区| 亚洲国产精品影院| 日本大香伊一区二区三区| 国产精品污www在线观看| 国产精品66部| 精品国产一区二区三区久久久蜜月 | 国产一区不卡在线| 日韩欧美中文一区| 天使萌一区二区三区免费观看| 91麻豆自制传媒国产之光| 国产精品久久久久久福利一牛影视| 国产精品中文字幕一区二区三区| 欧美mv和日韩mv国产网站| 天堂影院一区二区| 欧美精品 国产精品| 午夜精品一区在线观看| 欧美日韩一二三| 五月天中文字幕一区二区| 91国产精品成人| 一区二区在线观看不卡| 91猫先生在线| 亚洲一区在线观看视频| 欧洲视频一区二区| 性久久久久久久久久久久| 欧美裸体一区二区三区| 亚洲高清不卡在线| 欧美日韩精品电影| 日韩精品乱码免费| 日韩视频一区二区在线观看| 日韩**一区毛片| 精品国产乱码久久久久久蜜臀| 精品综合久久久久久8888| 欧美成人精精品一区二区频| 国产一二精品视频| 亚洲国产精品高清| 97久久超碰国产精品| 亚洲一区二区在线视频| 欧美一区二区三区视频在线观看| 日本亚洲免费观看| 久久青草国产手机看片福利盒子 | 国产欧美一区二区精品久导航| 国产精品一二二区| 国产精品久久久久桃色tv| 色偷偷成人一区二区三区91| 日韩精品午夜视频| 久久精品在线观看| 一本大道久久精品懂色aⅴ| 无码av免费一区二区三区试看| 日韩精品一区二区三区三区免费 | 99国产精品久久久久久久久久| 亚洲综合偷拍欧美一区色| 51精品国自产在线|