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

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

?? ads8344_driver.c

?? Linux/S3C44B0下ADS8344驅動源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*----------------------------------------------------------------------------*//* adc.c, V1.0 2007/07/21 Jesse Jiang * * linux/drivers/char/adc.c - AD converter driver main entity                            * * Author: Jesse Jiang <jiangxiaogen@sina.com> * Copyright (C) 2007~2008 * * * Updates history: * ----------------------------------------------------------- *   2007-07-21    Jesse Jiang   v1.0  initial *   2007-12-03    Jesse Jiang   fix the bug on queue management * * Hardware:   MCU: Samsung S3C44B0X *             For analog converter: Burr-Brown ADS8344 *             For digital count   : ExtInt2~7 *             For online check    : AIN0~5 *             For A/D type check  : PC10~15 * * OS:         uClinux version 2.4.20 * * Analog Input: *                ADS8344        S3C44B0X , I/O Config *                BUSY       ---->  PF6   , Input, Busy ind in low level *                /CS        ---->  PE7   , Ouput, Enable by low level *                DIN        ---->  PF5   , SIOTxD *                DOUT       ---->  PF7   , SIORxD *                DCLK       ---->  PF8   , SIOCLK * Digital Count: *                Channel0~5 ---->  ExtInt2~7          * * Online Check: *                Channel0~5 ---->  AIN0~5 * * A/D Type Check: *                SIF6_CS    ---->  PC15 , Output *                SIF6_A2    ---->  PC10 , Output *                SIF6_A1    ---->  PC11 , Output *                SIF6_A0    ---->  PC14 , Output * *                TXD1       ---->  PC12 , TxD1 *                RXD1       ---->  PC13 , RxD1 * *                PC15(CS) PC14(A0) PC11(A1) PC10(A2) * Chan. Select0:    1       0         0        0      *             1:    1       0         0        1      *             2:    1       0         1        0      *             3:    1       0         1        1      *             4:    1       1         0        0      *             5:    1       1         0        1   * * General work flow: *  1. Create a kerner thread in adc_open *  2. Poll 6-channel internal ADC to see whether there *     exists any external A/D converter connected *  3. If yes, send enquiry command to get external A/D *     converter types *  4. If yes, check ExtInt to get the count for digital  *     A/D, and check ADS8344 to get A/D conversion  *     result. *  *//*----------------------------------------------------------------------------*/#ifndef __KERNEL__#define __KERNEL__#endif#include <linux/kernel.h>     /* We're doing kernel work */#include <linux/module.h>     /* Specifically, a module */#include <linux/interrupt.h>  /* We want interrupts */#include <linux/miscdevice.h> /* for misc_register() and misc_deregister() */#include <linux/fs.h>         /* for struct 'file_operations' */#include <linux/timer.h>     /* for timeout interrupts */#include <linux/param.h>     /* for HZ. HZ = 100 and the timer step is 1/100 */#include <linux/sched.h>     /* for jiffies definition. jiffies is incremented                              * once for each clock tick; thus it's incremented                              * HZ times per secondes.*/#include <linux/mm.h>        /* for verify_area */#include <linux/slab.h>      /* for kmalloc */#include <linux/init.h>#include <linux/errno.h>#include <linux/smp_lock.h>#include <linux/nsyadc.h>#include <asm/io.h>#include <asm/uaccess.h>#include <asm/system.h>#include <asm/irq.h>#include <asm/arch/irqs.h>#include <asm/arch/s3c44b0x.h>/*----------------------------------------------------------------------------*/static const char* __file__ = __FILE__;/*----------------------------------------------------------------------------*//* * Kernel compatibility. * Kernel > 2.2.3, include/linux/version.h contain a macro for KERNEL_VERSION */#include <linux/version.h>#ifndef KERNEL_VERSION#define KERNEL_VERSION(a,b,c)  (((a) << 16) + ((b) << 8) + (c))#endif/* * Conditional compilation. LINUX_VERSION_CODE is the code of this version * (as per KERNEL_VERSION) */#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0))#include <asm/uaccess.h>    /* for put_user     */#include <linux/poll.h>     /* for polling fnct */#endif/* *  Should move to linux\include\msicdevice.h */#define NSY_ADC_MINOR    18/*----------------------------------------------------------------------------*//* ADC main entity------------------------------------------------------------*//* The item length in buffer queue */#define DATA_LENGTH       sizeof(struct adc_conv_info)/* Size of the buffer for the event queue */#define AD_BUF_SIZE        (256*DATA_LENGTH) /* 256*DATA_LENGTH, Modify for queue bug fix *//* signal to quit adc poll & sample threads */#define ADC_THREAD_SHUTDOWN  (sigmask(SIGKILL))                               /* |sigmask(SIGINT)|sigmask(SIGTERM))*/                                 /*----------------------------------------------------------------------------*//* Digital A/D conversion-----------------------------------------------------*//* Interrupt for digital sampling */#define CHA_IRQ_0     (S3C44B0X_INTERRUPT_EINT2)#define CHA_IRQ_1     (S3C44B0X_INTERRUPT_EINT3)#define CHA_IRQ_2345  (S3C44B0X_INTERRUPT_EINT4567)#define CLEAR_SIO_IRQ     { outl(0x00000010, S3C44B0X_I_ISPC); }#define CLEAR_CHA0_IRQ    { outl(0x00800000, S3C44B0X_I_ISPC); }#define CLEAR_CHA1_IRQ    { outl(0x00400000, S3C44B0X_I_ISPC); }#define CLEAR_CHA2345_IRQ { outb(0x0f, S3C44B0X_EXTINPND);\                            outl(0x00200000, S3C44B0X_I_ISPC);\                          }                            /*----------------------------------------------------------------------------*//* Analog A/D conversion------------------------------------------------------*/#define MAX_CONV_TIME  (50) /* Maximum conversion time for analog ADC:ms *//* SIO baudrate = MCLK/2/(Prescaler+1) */#define SIO_PRESCALER  (119)#define SIO_IVTCNT     (1)/* SIO control bits. */#define SIOCONT_BIT_CLK     (1<<7)#define SIOCONT_BIT_DIR     (1<<6)#define SIOCONT_BIT_TXRX    (1<<5)#define SIOCONT_BIT_EDGE    (1<<4)#define SIOCONT_BIT_START   (1<<3)#define SIOCONT_BIT_OPER    (1<<2)#define SIOCONT_BIT_MODE1   (1<<1)#define SIOCONT_BIT_MODE0   (1<<0)/* SIO initial definition  * Internal clock * MSB first * Transmit/Recevie * Falling edge * No action * Non hand-shaking * Interrupt mode */#define SIOCONT_INIT ( SIOCONT_BIT_CLK       *0 | \                       SIOCONT_BIT_DIR       *0 | \                       SIOCONT_BIT_TXRX         | \                       SIOCONT_BIT_EDGE         | \                       SIOCONT_BIT_START     *0 | \                       SIOCONT_BIT_OPER      *0 | \                       SIOCONT_BIT_MODE1     *0 | \                       SIOCONT_BIT_MODE0           )#define SIOCONT_DISABLE ((inl(S3C44B0X_SIOCON)&0xFFFFFFFC)|0x00)#define SIOCONT_ENABLE  ((inl(S3C44B0X_SIOCON)&0xFFFFFFFC)|0x01)#define SIOCONT_START   ((inl(S3C44B0X_SIOCON)&0xFFFFFFF7)|0x08)#define SIOCONT_STOP    ((inl(S3C44B0X_SIOCON)&0xFFFFFFF7)|0x00)/* SIO transfer definitions */#define WRITE_SIODATA(x) {outl(x, S3C44B0X_SIODAT);}#define SET_SIOCON(x)    {outl(x, S3C44B0X_SIOCON);}#define SET_SIOSBRDR(x)  {outl(x, S3C44B0X_SBRDR); }#define SET_SIOIVTCNT(x) {outl(x, S3C44B0X_ITVCNT); }#define SIODATA          (inb(S3C44B0X_SIODAT))#define SIO_INIT    { SET_SIOCON(SIOCONT_INIT); }     /* init SIO           */#define SIO_ENABLE  { SET_SIOCON(SIOCONT_ENABLE); }   /* enable SIO         */#define SIO_DISABLE { SET_SIOCON(SIOCONT_DISABLE); }  /* disable SIO        */#define SIO_START   { SET_SIOCON(SIOCONT_START); }    /* start SIO transfer */#define SIO_STOP    { SET_SIOCON(SIOCONT_STOP); }     /* stop SIO transfer  *//* ADS8344 control bits */#define ADS8344_START_BIT (1<<7)#define ADS8344_A2        (1<<6)#define ADS8344_A1        (1<<5)#define ADS8344_A0        (1<<4)#define ADS8344_NOP       (1<<3)  #define ADS8344_SER_DFR   (1<<2)  /* High: Single mode,                                    * Low: differential mode                                    */#define ADS8344_PD1       (1<<1)  #define ADS8344_PD0       (1<<0)  /* AD control bytes */#define AD_CTRL_CHA0   ( ADS8344_START_BIT   | \                         ADS8344_A2          | \                         ADS8344_A1          | \                         ADS8344_A0          | \                         ADS8344_NOP       *0| \                         ADS8344_SER_DFR     | \                         ADS8344_PD1       *1| \                         ADS8344_PD0       *1 )                         #define AD_CTRL_CHA1   ( ADS8344_START_BIT   | \                         ADS8344_A2        *1| \                         ADS8344_A1        *1| \                         ADS8344_A0        *0| \                         ADS8344_NOP       *1| \                         ADS8344_SER_DFR     | \                         ADS8344_PD1       *1| \                         ADS8344_PD0       *0 )                         #define AD_CTRL_CHA2   ( ADS8344_START_BIT   | \                         ADS8344_A2        *0| \                         ADS8344_A1        *0| \                         ADS8344_A0        *1| \                         ADS8344_NOP       *1| \                         ADS8344_SER_DFR     | \                         ADS8344_PD1       *0| \                         ADS8344_PD0       *1 )                         #define AD_CTRL_CHA3   ( ADS8344_START_BIT   | \                         ADS8344_A2        *1| \                         ADS8344_A1        *1| \                         ADS8344_A0        *0| \                         ADS8344_NOP       *1| \                         ADS8344_SER_DFR     | \                         ADS8344_PD1       *1| \                         ADS8344_PD0       *1  )                         #define AD_CTRL_CHA4   ( ADS8344_START_BIT   | \                         ADS8344_A2        *0| \                         ADS8344_A1        *1| \                         ADS8344_A0        *0| \                         ADS8344_NOP       *1| \                         ADS8344_SER_DFR     | \                         ADS8344_PD1       *1| \                         ADS8344_PD0       *1 )                        #define AD_CTRL_CHA5   ( ADS8344_START_BIT   | \                         ADS8344_A2        *1| \                         ADS8344_A1        *1| \                         ADS8344_A0        *0| \                         ADS8344_NOP       *0| \                         ADS8344_SER_DFR     | \                         ADS8344_PD1       *1| \                         ADS8344_PD0       *1  )/* * Generate clock to fall pull BUSY signal. * No start bit to avoid generating a BUSY at end of the transfer. */#define SIODATA_NULL    ( ADS8344_START_BIT *0| \                          ADS8344_A2        *1| \                          ADS8344_A1        *1| \                          ADS8344_A0        *1| \                          ADS8344_NOP       *1| \                          ADS8344_SER_DFR   *1| \                          ADS8344_PD1       *1| \                          ADS8344_PD0       *1 )/* ADS8344 A/D conversion states. */#define AD_CONV_ERROR       (-1)#define AD_CONV_IDLE        (0)#define AD_CONV_ST0         (1)#define AD_CONV_ST1         (2)#define AD_CONV_ST2         (3)#define AD_CONV_ST3         (4)#define AD_CONV_END         (5)/* ADS8344 conversion value bits */#define BIT15_BIT9         (0)#define BIT8_BIT1          (1)#define BIT0_BIT0          (2)/* Digital Sensor conversion state */#define AD_DIGIT_BEGIN    (0)#define AD_DIGIT_RUNNING  (1)#define AD_DIGIT_END      (2)#define EXT_AD_SELECT   { ads8344_select(); }#define EXT_AD_DESELECT { ads8344_deselect(); }#define TS_7843_DESELECT   { ads7843_deselect(); }/*----------------------------------------------------------------------------*//* predefinitions ------------------------------------------------------------*/static void handle_sio_irq(int irq, void *dev_id, struct pt_regs *regs);static void handle_cha0_irq(int irq, void *dev_id, struct pt_regs *regs);static void handle_cha1_irq(int irq, void *dev_id, struct pt_regs *regs);static void handle_cha2345_irq(int irq, void *dev_id, struct pt_regs *regs);static int adc_sample_thread(void *ctrl);static void ad_conv_state_shift(int new_state);static void put_in_queue(char *in, int len);static void release_SIO_transfer(void);static void set_SIO_transfer(void);static void sio_send_ad_ctrl(int channel);static ssize_t adc_read (struct file *file, char *buff, size_t len, loff_t *offset);static unsigned int adc_poll(struct file *file, poll_table *table);static int adc_ioctl(struct inode *inode, struct file *file,unsigned int cmd,unsigned long arg);static int adc_open(struct inode *inode, struct file *file);static int adc_release(struct inode *inode, struct file *file);static int adc_fasync(int inode, struct file *file, int mode);/*----------------------------------------------------------------------------*//* structure -----------------------------------------------------------------*/struct adc_queue {  unsigned long head;  unsigned long tail;  unsigned long count;  /* Add for queue bug fix */  spinlock_t lock;  wait_queue_head_t proc_list;  struct fasync_struct *fasync;  unsigned char buf[AD_BUF_SIZE];};struct adc_digit_data{  int ad_count_dur;  /* Unit: us for duration */  struct timeval first_int;  struct timeval second_int;  };struct ctrl_info_t {  struct task_struct *monitor_thread;   int sample_ms;};/*----------------------------------------------------------------------------*//* Variables -----------------------------------------------------------------*//* thread variables */struct ctrl_info_t sample_ctrl;static volatile char sample_shutdown = 0;/* adc drv parameters. */static struct adc_drv_params   current_params;/* adc buffer queue */static struct adc_queue *queue;static volatile int    device_open = 0;   /* number of open device to prevent concurrent                                  * access to the same device                                  */static volatile int have_ad_data = 0;spinlock_t have_dat_lock = SPIN_LOCK_UNLOCKED;/* A/D conversion info: a item variable in the queue. */static struct adc_conv_info   adc_queue_node;                                                                    /* ADS8344 conversion state */static volatile int ad_conv_state;spinlock_t conv_state_lock = SPIN_LOCK_UNLOCKED;/* ADS8344 conversion value */static volatile unsigned short ad_conv_val = 0;/* digital sample variable: to storage sampling data */static struct adc_digit_data adc_digit_sample[6];static volatile int ad_digit_st[6];                             static int s3c44b0_adc_psr = 128; //0xF; /* default value */static spinlock_t digit_lock = SPIN_LOCK_UNLOCKED;/*----------------------------------------------------------------------------*//* internal support functions ------------------------------------------------*/                                  /* * nsyadc_sleep: Delay, unit in ms */static void nsyadc_sleep(int delay){  set_current_state(TASK_UNINTERRUPTIBLE);  schedule_timeout(HZ*delay/1000);}/*----------------------------------------------------------------------------*//* Init & release functions --------------------------------------------------*//* * Set default values for the params of the driver. */static void init_adc_settings(void) {  int i;    current_params.version_req = ADC_VERSION;  current_params.sample_ms = 20;    for (i = 0; i < 6; i++)  {    current_params.cha[i].snr_online = SNR_IS_OFF;    current_params.cha[i].snr_type   = SNR_TYPE_UNKNOWN;    current_params.cha[i].snr_mode   = SNR_MODE_UNKNOWN;    current_params.cha[i].snr_id     = SNR_ID_UNKNOWN;    current_params.cha[i].snr_oper   = SNR_OPER_UNKNOWN;  }  current_params.deglitch_on = 1;  current_params.event_queue_on = 1;    adc_queue_node.snr_type  = SNR_TYPE_UNKNOWN;  adc_queue_node.snr_value = SNR_VAL_INVALID;    do_gettimeofday(&adc_queue_node.ad_timeval);    for (i = 0; i < 6; i++)  {    ad_digit_st[i] = AD_DIGIT_BEGIN;    adc_digit_sample[i].ad_count_dur = 0;    adc_digit_sample[i].first_int.tv_sec  = 0;        adc_digit_sample[i].first_int.tv_usec = 0;    adc_digit_sample[i].second_int.tv_sec  = 0;    adc_digit_sample[i].second_int.tv_usec = 0;  }    ad_conv_state = AD_CONV_IDLE;}/* * to select chip ADS8344 */static void ads8344_select (void){  int val32;    /* Set PE7 to low level */  val32 = inl(S3C44B0X_PDATE);  outl((val32&0xFFFFFF18)|0x00000000, S3C44B0X_PDATE); /* GPE7: (ADS8344-/CS) low*/}/* * to deselect chip ADS8344 */static void ads8344_deselect (void){  int val32;    /* Set PE7 to high level */  val32 = inl(S3C44B0X_PDATE);  outl((val32&0xFFFFFF18)|0x00000048, S3C44B0X_PDATE); /* GPE7: (ADS8344-/CS) high*/}/* * to deselece chip 7843 */static void ads7843_deselect (void){	int i, val32;	  /* Set PE5 to high level */  val32 = inl(S3C44B0X_PDATF) |0xef;  outl(val32, S3C44B0X_PDATF); /* GPE5: (ADS7843-/CS) high*/    for (i = 0; i < 500; i++); /* Wait for ADS7843 to be stable */}  static void init_adc_gpio(void) {   unsigned int val32;    /* initialize s3c44b0 ADC */  val32 = inl(S3C44B0X_CLKCON) | (1 << 12);  outl(val32, S3C44B0X_CLKCON);      outl(s3c44b0_adc_psr, S3C44B0X_ADCPSR); /* config prescaler */    val32 = inl(S3C44B0X_ADCCON) | 0x20;  outl(val32, S3C44B0X_ADCCON);           /* Sleep ADC */    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩精品一区二区浪潮av| 亚洲夂夂婷婷色拍ww47| 国产精品久久久久久久午夜片 | 国产日本欧洲亚洲| 一区二区理论电影在线观看| 国内外精品视频| 色香蕉久久蜜桃| 久久久久久久综合日本| 亚洲成a人片在线不卡一二三区| 成人在线视频一区二区| 欧美一级欧美三级在线观看| 综合色中文字幕| 国产超碰在线一区| 久久综合色综合88| 免费成人小视频| 在线不卡中文字幕播放| 一区二区三区四区国产精品| 不卡一区二区三区四区| 久久婷婷国产综合国色天香| 日本欧美韩国一区三区| 在线视频欧美区| 中文字幕一区二区三区在线播放| 国模大尺度一区二区三区| 91麻豆精品国产91久久久使用方法| 最新久久zyz资源站| 国产成a人亚洲精品| 久久精品人人做人人综合| 韩国av一区二区三区在线观看| 欧美二区乱c少妇| 尤物视频一区二区| 91国产免费看| 亚洲一区二区三区四区在线观看| 色妹子一区二区| 亚洲欧美一区二区不卡| 色综合色狠狠综合色| 亚洲欧美偷拍三级| 欧美午夜视频网站| 午夜视频久久久久久| 欧美高清一级片在线| 日韩精品欧美精品| 日韩一区二区在线播放| 国产在线精品免费| 国产日韩精品久久久| av在线播放不卡| 亚洲麻豆国产自偷在线| 欧美日韩一区二区三区视频| 日韩成人dvd| 亚洲精品一区二区三区福利| 国产91丝袜在线播放0| 日韩美女视频19| 欧美影院午夜播放| 久久精品久久精品| 欧美激情中文不卡| 欧美做爰猛烈大尺度电影无法无天| 亚洲一卡二卡三卡四卡| 精品三级在线看| 成人免费高清在线观看| 亚洲午夜激情av| 精品日韩成人av| av在线播放一区二区三区| 亚洲高清视频在线| 精品91自产拍在线观看一区| 成人福利在线看| 亚洲成人中文在线| 久久九九全国免费| 欧美私人免费视频| 精品综合免费视频观看| 亚洲色图视频网站| 日韩丝袜情趣美女图片| 97超碰欧美中文字幕| 欧美a级理论片| 国产精品久久一级| 日韩一卡二卡三卡| 色综合久久天天| 韩国午夜理伦三级不卡影院| 1区2区3区精品视频| 日韩欧美国产三级| 色狠狠色狠狠综合| 国产一区二区福利视频| 亚洲成av人片一区二区梦乃| 国产日韩欧美亚洲| 欧美日韩久久不卡| 波多野结衣精品在线| 麻豆精品一二三| 亚洲国产综合色| 国产精品国产三级国产普通话99 | 在线日韩av片| 国产伦精品一区二区三区视频青涩 | 91美女视频网站| 日韩精品一二三四| 亚洲黄一区二区三区| 国产亚洲一区二区三区四区| 欧美精品 国产精品| 色综合网站在线| 成人免费视频app| 婷婷综合另类小说色区| 国产精品对白交换视频| 久久久精品国产免大香伊| 欧美欧美欧美欧美| 欧美吻胸吃奶大尺度电影 | 亚洲色图制服丝袜| 国产日韩精品一区二区三区在线| 欧美一区二区国产| 欧美无砖专区一中文字| 在线看日本不卡| 色综合 综合色| 91丝袜美女网| 色先锋aa成人| 色香色香欲天天天影视综合网| 不卡一二三区首页| 9i在线看片成人免费| 成人成人成人在线视频| 成人免费高清视频| 波多野洁衣一区| 色悠悠久久综合| 色综合久久88色综合天天免费| 91蝌蚪porny成人天涯| 97se狠狠狠综合亚洲狠狠| aaa欧美大片| 91麻豆免费视频| 欧洲一区二区av| 欧美日韩精品一区视频| 91.com视频| 日韩欧美的一区| 久久久综合九色合综国产精品| 久久久久久免费| 国产欧美一区在线| 亚洲视频一区在线| 亚洲www啪成人一区二区麻豆| 性欧美大战久久久久久久久| 日韩av一级片| 九色综合国产一区二区三区| 国产成人免费9x9x人网站视频| 成人午夜又粗又硬又大| 91美女福利视频| 欧美精品国产精品| 久久久久国产精品人| 综合久久一区二区三区| 亚洲一区电影777| 美女脱光内衣内裤视频久久影院| 国产精品996| 在线观看视频欧美| 欧美电影免费观看高清完整版| 国产日韩综合av| 亚洲一区二区三区免费视频| 久久99热这里只有精品| 99久久99久久久精品齐齐| 欧美日韩一区二区三区高清| 久久一留热品黄| 亚洲日本成人在线观看| 免费看黄色91| 99久久夜色精品国产网站| 欧美一区二区三区性视频| 亚洲国产精品ⅴa在线观看| 亚洲一级二级在线| 国产福利一区在线| 欧美日韩国产经典色站一区二区三区 | 国产三区在线成人av| 亚洲一区二区三区四区五区黄| 国产在线一区二区| 欧美亚洲动漫精品| 国产色91在线| 奇米影视在线99精品| 99久久免费精品| 精品国产免费久久 | 亚洲欧洲精品一区二区三区 | 欧美mv和日韩mv的网站| 亚洲最新视频在线观看| 国产精品主播直播| 在线不卡的av| 亚洲男人的天堂在线aⅴ视频| 久久97超碰色| 欧美图片一区二区三区| 国产精品日韩成人| 久久爱www久久做| 91麻豆精品久久久久蜜臀| 亚洲免费观看高清完整| 国产精品夜夜嗨| 精品国一区二区三区| 日韩电影免费一区| 欧美三级电影一区| 亚洲欧美激情一区二区| 国产成人av一区二区| 精品999久久久| 日本伊人精品一区二区三区观看方式| 色婷婷精品久久二区二区蜜臂av | 色妞www精品视频| 国产精品天天摸av网| 国内精品国产成人国产三级粉色 | 中文字幕一区免费在线观看| 久久99国产精品久久99果冻传媒| 欧美日韩第一区日日骚| 亚洲小说欧美激情另类| 色综合久久久久网| 一区免费观看视频| 99精品视频一区二区| 中文字幕一区二区三区蜜月| 成人晚上爱看视频| 国产精品久久久久一区二区三区 | 国产精品自拍毛片|