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

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

?? bcm43xx_main.c

?? 無線網(wǎng)卡驅(qū)動,有很好的參考價(jià)值,在linux_2.6.21下可以直接使用,如果在其他平臺,可以參考移植
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*  Broadcom BCM43xx wireless driver  Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>,                     Stefano Brivio <st3@riseup.net>                     Michael Buesch <mbuesch@freenet.de>                     Danny van Dyk <kugelfang@gentoo.org>                     Andreas Jaggi <andreas.jaggi@waterwave.ch>  Some parts of the code in this file are derived from the ipw2200  driver  Copyright(c) 2003 - 2004 Intel Corporation.  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program; see the file COPYING.  If not, write to  the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,  Boston, MA 02110-1301, USA.*/#include <linux/delay.h>#include <linux/init.h>#include <linux/moduleparam.h>#include <linux/if_arp.h>#include <linux/etherdevice.h>#include <linux/version.h>#include <linux/firmware.h>#include <linux/wireless.h>#include <linux/workqueue.h>#include <linux/skbuff.h>#include <linux/dma-mapping.h>#include <net/iw_handler.h>#include "bcm43xx.h"#include "bcm43xx_main.h"#include "bcm43xx_debugfs.h"#include "bcm43xx_radio.h"#include "bcm43xx_phy.h"#include "bcm43xx_dma.h"#include "bcm43xx_pio.h"#include "bcm43xx_power.h"#include "bcm43xx_wx.h"#include "bcm43xx_ethtool.h"#include "bcm43xx_xmit.h"#include "bcm43xx_sysfs.h"MODULE_DESCRIPTION("Broadcom BCM43xx wireless driver");MODULE_AUTHOR("Martin Langer");MODULE_AUTHOR("Stefano Brivio");MODULE_AUTHOR("Michael Buesch");MODULE_LICENSE("GPL");#ifdef CONFIG_BCM947XXextern char *nvram_get(char *name);#endif#if defined(CONFIG_BCM43XX_DMA) && defined(CONFIG_BCM43XX_PIO)static int modparam_pio;module_param_named(pio, modparam_pio, int, 0444);MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode");#elif defined(CONFIG_BCM43XX_DMA)# define modparam_pio	0#elif defined(CONFIG_BCM43XX_PIO)# define modparam_pio	1#endifstatic int modparam_bad_frames_preempt;module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);MODULE_PARM_DESC(bad_frames_preempt, "enable(1) / disable(0) Bad Frames Preemption");static int modparam_short_retry = BCM43xx_DEFAULT_SHORT_RETRY_LIMIT;module_param_named(short_retry, modparam_short_retry, int, 0444);MODULE_PARM_DESC(short_retry, "Short-Retry-Limit (0 - 15)");static int modparam_long_retry = BCM43xx_DEFAULT_LONG_RETRY_LIMIT;module_param_named(long_retry, modparam_long_retry, int, 0444);MODULE_PARM_DESC(long_retry, "Long-Retry-Limit (0 - 15)");static int modparam_locale = -1;module_param_named(locale, modparam_locale, int, 0444);MODULE_PARM_DESC(country, "Select LocaleCode 0-11 (For travelers)");static int modparam_noleds;module_param_named(noleds, modparam_noleds, int, 0444);MODULE_PARM_DESC(noleds, "Turn off all LED activity");static char modparam_fwpostfix[64];module_param_string(fwpostfix, modparam_fwpostfix, 64, 0444);MODULE_PARM_DESC(fwpostfix, "Postfix for .fw files. Useful for using multiple firmware image versions.");/* If you want to debug with just a single device, enable this, * where the string is the pci device ID (as given by the kernel's * pci_name function) of the device to be used. *///#define DEBUG_SINGLE_DEVICE_ONLY	"0001:11:00.0"/* If you want to enable printing of each MMIO access, enable this. *///#define DEBUG_ENABLE_MMIO_PRINT/* If you want to enable printing of MMIO access within * ucode/pcm upload, initvals write, enable this. *///#define DEBUG_ENABLE_UCODE_MMIO_PRINT/* If you want to enable printing of PCI Config Space access, enable this *///#define DEBUG_ENABLE_PCILOG/* Detailed list maintained at: * http://openfacts.berlios.de/index-en.phtml?title=Bcm43xxDevices */	static struct pci_device_id bcm43xx_pci_tbl[] = {	/* Broadcom 4303 802.11b */	{ PCI_VENDOR_ID_BROADCOM, 0x4301, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4307 802.11b */	{ PCI_VENDOR_ID_BROADCOM, 0x4307, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4311 802.11(a)/b/g */	{ PCI_VENDOR_ID_BROADCOM, 0x4311, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4312 802.11a/b/g */	{ PCI_VENDOR_ID_BROADCOM, 0x4312, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4318 802.11b/g */	{ PCI_VENDOR_ID_BROADCOM, 0x4318, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4319 802.11a/b/g */	{ PCI_VENDOR_ID_BROADCOM, 0x4319, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4306 802.11b/g */	{ PCI_VENDOR_ID_BROADCOM, 0x4320, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4306 802.11a *///	{ PCI_VENDOR_ID_BROADCOM, 0x4321, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 4309 802.11a/b/g */	{ PCI_VENDOR_ID_BROADCOM, 0x4324, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Broadcom 43XG 802.11b/g */	{ PCI_VENDOR_ID_BROADCOM, 0x4325, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },#ifdef CONFIG_BCM947XX	/* SB bus on BCM947xx */	{ PCI_VENDOR_ID_BROADCOM, 0x0800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },#endif	{ 0 },};MODULE_DEVICE_TABLE(pci, bcm43xx_pci_tbl);static void bcm43xx_ram_write(struct bcm43xx_private *bcm, u16 offset, u32 val){	u32 status;	status = bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD);	if (!(status & BCM43xx_SBF_XFER_REG_BYTESWAP))		val = swab32(val);	bcm43xx_write32(bcm, BCM43xx_MMIO_RAM_CONTROL, offset);	mmiowb();	bcm43xx_write32(bcm, BCM43xx_MMIO_RAM_DATA, val);}static inlinevoid bcm43xx_shm_control_word(struct bcm43xx_private *bcm,			      u16 routing, u16 offset){	u32 control;	/* "offset" is the WORD offset. */	control = routing;	control <<= 16;	control |= offset;	bcm43xx_write32(bcm, BCM43xx_MMIO_SHM_CONTROL, control);}u32 bcm43xx_shm_read32(struct bcm43xx_private *bcm,		       u16 routing, u16 offset){	u32 ret;	if (routing == BCM43xx_SHM_SHARED) {		if (offset & 0x0003) {			/* Unaligned access */			bcm43xx_shm_control_word(bcm, routing, offset >> 2);			ret = bcm43xx_read16(bcm, BCM43xx_MMIO_SHM_DATA_UNALIGNED);			ret <<= 16;			bcm43xx_shm_control_word(bcm, routing, (offset >> 2) + 1);			ret |= bcm43xx_read16(bcm, BCM43xx_MMIO_SHM_DATA);			return ret;		}		offset >>= 2;	}	bcm43xx_shm_control_word(bcm, routing, offset);	ret = bcm43xx_read32(bcm, BCM43xx_MMIO_SHM_DATA);	return ret;}u16 bcm43xx_shm_read16(struct bcm43xx_private *bcm,		       u16 routing, u16 offset){	u16 ret;	if (routing == BCM43xx_SHM_SHARED) {		if (offset & 0x0003) {			/* Unaligned access */			bcm43xx_shm_control_word(bcm, routing, offset >> 2);			ret = bcm43xx_read16(bcm, BCM43xx_MMIO_SHM_DATA_UNALIGNED);			return ret;		}		offset >>= 2;	}	bcm43xx_shm_control_word(bcm, routing, offset);	ret = bcm43xx_read16(bcm, BCM43xx_MMIO_SHM_DATA);	return ret;}void bcm43xx_shm_write32(struct bcm43xx_private *bcm,			 u16 routing, u16 offset,			 u32 value){	if (routing == BCM43xx_SHM_SHARED) {		if (offset & 0x0003) {			/* Unaligned access */			bcm43xx_shm_control_word(bcm, routing, offset >> 2);			mmiowb();			bcm43xx_write16(bcm, BCM43xx_MMIO_SHM_DATA_UNALIGNED,					(value >> 16) & 0xffff);			mmiowb();			bcm43xx_shm_control_word(bcm, routing, (offset >> 2) + 1);			mmiowb();			bcm43xx_write16(bcm, BCM43xx_MMIO_SHM_DATA,					value & 0xffff);			return;		}		offset >>= 2;	}	bcm43xx_shm_control_word(bcm, routing, offset);	mmiowb();	bcm43xx_write32(bcm, BCM43xx_MMIO_SHM_DATA, value);}void bcm43xx_shm_write16(struct bcm43xx_private *bcm,			 u16 routing, u16 offset,			 u16 value){	if (routing == BCM43xx_SHM_SHARED) {		if (offset & 0x0003) {			/* Unaligned access */			bcm43xx_shm_control_word(bcm, routing, offset >> 2);			mmiowb();			bcm43xx_write16(bcm, BCM43xx_MMIO_SHM_DATA_UNALIGNED,					value);			return;		}		offset >>= 2;	}	bcm43xx_shm_control_word(bcm, routing, offset);	mmiowb();	bcm43xx_write16(bcm, BCM43xx_MMIO_SHM_DATA, value);}void bcm43xx_tsf_read(struct bcm43xx_private *bcm, u64 *tsf){	/* We need to be careful. As we read the TSF from multiple	 * registers, we should take care of register overflows.	 * In theory, the whole tsf read process should be atomic.	 * We try to be atomic here, by restaring the read process,	 * if any of the high registers changed (overflew).	 */	if (bcm->current_core->rev >= 3) {		u32 low, high, high2;		do {			high = bcm43xx_read32(bcm, BCM43xx_MMIO_REV3PLUS_TSF_HIGH);			low = bcm43xx_read32(bcm, BCM43xx_MMIO_REV3PLUS_TSF_LOW);			high2 = bcm43xx_read32(bcm, BCM43xx_MMIO_REV3PLUS_TSF_HIGH);		} while (unlikely(high != high2));		*tsf = high;		*tsf <<= 32;		*tsf |= low;	} else {		u64 tmp;		u16 v0, v1, v2, v3;		u16 test1, test2, test3;		do {			v3 = bcm43xx_read16(bcm, BCM43xx_MMIO_TSF_3);			v2 = bcm43xx_read16(bcm, BCM43xx_MMIO_TSF_2);			v1 = bcm43xx_read16(bcm, BCM43xx_MMIO_TSF_1);			v0 = bcm43xx_read16(bcm, BCM43xx_MMIO_TSF_0);			test3 = bcm43xx_read16(bcm, BCM43xx_MMIO_TSF_3);			test2 = bcm43xx_read16(bcm, BCM43xx_MMIO_TSF_2);			test1 = bcm43xx_read16(bcm, BCM43xx_MMIO_TSF_1);		} while (v3 != test3 || v2 != test2 || v1 != test1);		*tsf = v3;		*tsf <<= 48;		tmp = v2;		tmp <<= 32;		*tsf |= tmp;		tmp = v1;		tmp <<= 16;		*tsf |= tmp;		*tsf |= v0;	}}void bcm43xx_tsf_write(struct bcm43xx_private *bcm, u64 tsf){	u32 status;	status = bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD);	status |= BCM43xx_SBF_TIME_UPDATE;	bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD, status);	mmiowb();	/* Be careful with the in-progress timer.	 * First zero out the low register, so we have a full	 * register-overflow duration to complete the operation.	 */	if (bcm->current_core->rev >= 3) {		u32 lo = (tsf & 0x00000000FFFFFFFFULL);		u32 hi = (tsf & 0xFFFFFFFF00000000ULL) >> 32;		bcm43xx_write32(bcm, BCM43xx_MMIO_REV3PLUS_TSF_LOW, 0);		mmiowb();		bcm43xx_write32(bcm, BCM43xx_MMIO_REV3PLUS_TSF_HIGH, hi);		mmiowb();		bcm43xx_write32(bcm, BCM43xx_MMIO_REV3PLUS_TSF_LOW, lo);	} else {		u16 v0 = (tsf & 0x000000000000FFFFULL);		u16 v1 = (tsf & 0x00000000FFFF0000ULL) >> 16;		u16 v2 = (tsf & 0x0000FFFF00000000ULL) >> 32;		u16 v3 = (tsf & 0xFFFF000000000000ULL) >> 48;		bcm43xx_write16(bcm, BCM43xx_MMIO_TSF_0, 0);		mmiowb();		bcm43xx_write16(bcm, BCM43xx_MMIO_TSF_3, v3);		mmiowb();		bcm43xx_write16(bcm, BCM43xx_MMIO_TSF_2, v2);		mmiowb();		bcm43xx_write16(bcm, BCM43xx_MMIO_TSF_1, v1);		mmiowb();		bcm43xx_write16(bcm, BCM43xx_MMIO_TSF_0, v0);	}	status = bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD);	status &= ~BCM43xx_SBF_TIME_UPDATE;	bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD, status);}staticvoid bcm43xx_macfilter_set(struct bcm43xx_private *bcm,			   u16 offset,			   const u8 *mac){	u16 data;	offset |= 0x0020;	bcm43xx_write16(bcm, BCM43xx_MMIO_MACFILTER_CONTROL, offset);	data = mac[0];	data |= mac[1] << 8;	bcm43xx_write16(bcm, BCM43xx_MMIO_MACFILTER_DATA, data);	data = mac[2];	data |= mac[3] << 8;	bcm43xx_write16(bcm, BCM43xx_MMIO_MACFILTER_DATA, data);	data = mac[4];	data |= mac[5] << 8;	bcm43xx_write16(bcm, BCM43xx_MMIO_MACFILTER_DATA, data);}static void bcm43xx_macfilter_clear(struct bcm43xx_private *bcm,				    u16 offset){	const u8 zero_addr[ETH_ALEN] = { 0 };	bcm43xx_macfilter_set(bcm, offset, zero_addr);}static void bcm43xx_write_mac_bssid_templates(struct bcm43xx_private *bcm){	const u8 *mac = (const u8 *)(bcm->net_dev->dev_addr);	const u8 *bssid = (const u8 *)(bcm->ieee->bssid);	u8 mac_bssid[ETH_ALEN * 2];	int i;	memcpy(mac_bssid, mac, ETH_ALEN);	memcpy(mac_bssid + ETH_ALEN, bssid, ETH_ALEN);	/* Write our MAC address and BSSID to template ram */	for (i = 0; i < ARRAY_SIZE(mac_bssid); i += sizeof(u32))		bcm43xx_ram_write(bcm, 0x20 + i, *((u32 *)(mac_bssid + i)));	for (i = 0; i < ARRAY_SIZE(mac_bssid); i += sizeof(u32))		bcm43xx_ram_write(bcm, 0x78 + i, *((u32 *)(mac_bssid + i)));	for (i = 0; i < ARRAY_SIZE(mac_bssid); i += sizeof(u32))		bcm43xx_ram_write(bcm, 0x478 + i, *((u32 *)(mac_bssid + i)));}//FIXME: Well, we should probably call them from somewhere.#if 0static void bcm43xx_set_slot_time(struct bcm43xx_private *bcm, u16 slot_time){	/* slot_time is in usec. */	if (bcm43xx_current_phy(bcm)->type != BCM43xx_PHYTYPE_G)		return;	bcm43xx_write16(bcm, 0x684, 510 + slot_time);	bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x0010, slot_time);}static void bcm43xx_short_slot_timing_enable(struct bcm43xx_private *bcm){	bcm43xx_set_slot_time(bcm, 9);}static void bcm43xx_short_slot_timing_disable(struct bcm43xx_private *bcm){	bcm43xx_set_slot_time(bcm, 20);}#endif/* FIXME: To get the MAC-filter working, we need to implement the *        following functions (and rename them :) */#if 0static void bcm43xx_disassociate(struct bcm43xx_private *bcm){	bcm43xx_mac_suspend(bcm);	bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC);	bcm43xx_ram_write(bcm, 0x0026, 0x0000);	bcm43xx_ram_write(bcm, 0x0028, 0x0000);	bcm43xx_ram_write(bcm, 0x007E, 0x0000);	bcm43xx_ram_write(bcm, 0x0080, 0x0000);	bcm43xx_ram_write(bcm, 0x047E, 0x0000);	bcm43xx_ram_write(bcm, 0x0480, 0x0000);	if (bcm->current_core->rev < 3) {		bcm43xx_write16(bcm, 0x0610, 0x8000);		bcm43xx_write16(bcm, 0x060E, 0x0000);	} else		bcm43xx_write32(bcm, 0x0188, 0x80000000);	bcm43xx_shm_write32(bcm, BCM43xx_SHM_WIRELESS, 0x0004, 0x000003ff);	if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_G &&	    ieee80211_is_ofdm_rate(bcm->softmac->txrates.default_rate))		bcm43xx_short_slot_timing_enable(bcm);	bcm43xx_mac_enable(bcm);}static void bcm43xx_associate(struct bcm43xx_private *bcm,			      const u8 *mac){	memcpy(bcm->ieee->bssid, mac, ETH_ALEN);	bcm43xx_mac_suspend(bcm);	bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_ASSOC, mac);	bcm43xx_write_mac_bssid_templates(bcm);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美刺激午夜性久久久久久久| 日产欧产美韩系列久久99| 国产激情91久久精品导航| www成人在线观看| 欧美老肥妇做.爰bbww| 色999日韩国产欧美一区二区| 国产精品少妇自拍| 97精品视频在线观看自产线路二| 国产精品久久毛片| 91成人看片片| 日韩av不卡在线观看| 日韩精品免费视频人成| 欧美变态凌虐bdsm| 成人性色生活片| 亚洲在线免费播放| 欧美一卡二卡在线观看| 国产一区二三区| 中文字幕欧美一| 欧美系列亚洲系列| 美女视频免费一区| 亚洲欧洲av另类| 欧美日韩高清不卡| 国产一区二区不卡在线| 亚洲三级在线看| 在线播放日韩导航| 国产凹凸在线观看一区二区| 亚洲天堂成人网| 欧美xxx久久| 91丨porny丨户外露出| 日本vs亚洲vs韩国一区三区| 久久精品免费在线观看| 欧美私模裸体表演在线观看| 国内精品伊人久久久久影院对白| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美私模裸体表演在线观看| 国产不卡视频一区二区三区| 婷婷综合五月天| 亚洲国产精品99久久久久久久久 | 一区二区三区蜜桃网| 91精品久久久久久蜜臀| 成人av中文字幕| 美女高潮久久久| 亚洲精品久久嫩草网站秘色| 精品国产电影一区二区| 欧美亚洲一区二区在线| 高清不卡一区二区在线| 免费成人在线视频观看| 一区二区三区中文字幕在线观看| 精品欧美乱码久久久久久| 欧美丝袜丝nylons| aaa欧美色吧激情视频| 激情图片小说一区| 日韩综合小视频| 一级日本不卡的影视| 日本一区二区三区dvd视频在线| 91精品国产一区二区三区| 色偷偷88欧美精品久久久| 懂色av一区二区三区免费看| 精品亚洲免费视频| 全部av―极品视觉盛宴亚洲| 亚洲成人激情av| 一区二区三区四区激情| 亚洲色图一区二区三区| 中文字幕的久久| 久久久精品综合| 久久夜色精品国产欧美乱极品| 666欧美在线视频| 欧美剧在线免费观看网站 | 亚洲最大成人综合| 国产精品久久久久久久浪潮网站| 精品国产亚洲一区二区三区在线观看| 欧美喷潮久久久xxxxx| 在线精品国精品国产尤物884a| 99热在这里有精品免费| 成人精品视频.| 成人免费视频播放| 丁香婷婷综合激情五月色| 国产**成人网毛片九色 | 91麻豆精品国产91久久久久| 在线观看一区二区视频| 欧美亚洲精品一区| 欧美男同性恋视频网站| 欧美男生操女生| 欧美一级生活片| 精品福利在线导航| 国产日韩v精品一区二区| 久久精品视频网| 中文字幕精品三区| 亚洲精品v日韩精品| 亚洲影视在线播放| 日韩av不卡一区二区| 久久国内精品视频| 国产成人一级电影| 99久久免费国产| 欧美性色欧美a在线播放| 欧美日本一区二区三区四区| 3751色影院一区二区三区| 日韩免费在线观看| 国产午夜精品一区二区三区嫩草 | 色哟哟亚洲精品| 欧美日韩国产天堂| 日韩一区二区三区观看| 久久蜜桃香蕉精品一区二区三区| 国产精品久久久久精k8| 亚洲综合视频网| 另类中文字幕网| 成人app软件下载大全免费| 在线观看日韩精品| 日韩欧美一区二区在线视频| 亚洲国产精品成人综合色在线婷婷| 亚洲日本青草视频在线怡红院| 午夜视频一区二区| 国产麻豆一精品一av一免费 | 色综合久久久久网| 6080午夜不卡| 国产精品日日摸夜夜摸av| 亚洲成人av电影在线| 国产中文字幕精品| 一本久久精品一区二区| 日韩免费一区二区| 亚洲欧洲精品一区二区精品久久久| 亚洲成av人片在线观看| 国产精品一区二区在线播放 | 欧美精品xxxxbbbb| 亚洲国产精品激情在线观看| 图片区小说区国产精品视频| 国产成人a级片| 91精品视频网| 亚洲人xxxx| 国产精品资源在线观看| 欧美视频在线一区| 久久久99久久| 日韩电影在线看| 色av成人天堂桃色av| 国产亚洲欧美日韩日本| 日本麻豆一区二区三区视频| 99精品桃花视频在线观看| 精品粉嫩aⅴ一区二区三区四区| 亚洲精品免费在线观看| 国产99精品国产| 欧美电影免费观看高清完整版在线 | 五月天欧美精品| 成人99免费视频| 久久精品一区蜜桃臀影院| 日韩精品乱码av一区二区| 日本韩国精品在线| 国产精品电影一区二区| 国产美女一区二区三区| 欧美一区二区三区在线| 亚洲线精品一区二区三区| 成人av网站免费观看| 国产亚洲一区二区三区| 裸体健美xxxx欧美裸体表演| 欧美精品久久99| 日韩电影网1区2区| 欧美精品乱码久久久久久| 亚洲午夜一区二区三区| 91精品办公室少妇高潮对白| 国产精品国产三级国产专播品爱网| 国产精品一卡二| 2019国产精品| 国产福利一区在线| 国产偷国产偷精品高清尤物| 国产一区二区美女| 久久久精品国产免大香伊| 国产一区二区三区免费| 久久这里只有精品6| 精品午夜一区二区三区在线观看| 日韩精品一区二| 激情综合色综合久久综合| 337p日本欧洲亚洲大胆色噜噜| 捆绑调教美女网站视频一区| 欧美mv日韩mv| 国产成人亚洲精品狼色在线| 国产欧美一区二区精品性色超碰| 国产伦精品一区二区三区视频青涩 | 久久综合久久综合久久综合| 精品在线你懂的| 国产亚洲一区二区三区在线观看| 国产盗摄女厕一区二区三区| 国产欧美精品区一区二区三区| 成人午夜精品在线| 亚洲人成网站在线| 欧美日韩国产一级片| 免费观看成人av| 久久伊99综合婷婷久久伊| 成人爱爱电影网址| 一二三四社区欧美黄| 欧美一区二区三区在线观看视频| 久久精品噜噜噜成人88aⅴ| 久久久www免费人成精品| 成人激情午夜影院| 亚洲风情在线资源站| 欧美不卡一二三| 99在线热播精品免费| 同产精品九九九| 国产偷v国产偷v亚洲高清| 色综合天天做天天爱| 日韩不卡手机在线v区| 久久久久久久久99精品|