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

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

?? sdmylex.c

?? 著名操作系統Plan 9的第三版的部分核心源代碼。現在很難找到了。Plan 9是bell實驗室開發的Unix后繼者。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Mylex MultiMaster (Buslogic BT-*) SCSI Host Adapter * in both 24-bit and 32-bit mode. * 24-bit mode works for Adaptec AHA-154xx series too. * * To do: *	tidy the PCI probe and do EISA; *	allocate more Ccb's as needed, up to NMbox-1; *	add nmbox and nccb to Ctlr struct for the above; *	64-bit LUN/explicit wide support necessary? * */#include "u.h"#include "../port/lib.h"#include "mem.h"#include "dat.h"#include "fns.h"#include "io.h"#include "ureg.h"#include "../port/error.h"#include "sd.h"#define K2BPA(va, tbdf)	PADDR(va)#define BPA2K(pa, tbdf)	KADDR(pa)extern SDifc sdmylexifc;enum {					/* registers */	Rcontrol	= 0x00,		/* WO: control register */	Rstatus		= 0x00,		/* RO: status register */	Rcpr		= 0x01,		/* WO: command/parameter register */	Rdatain		= 0x01,		/* RO: data-in register */	Rinterrupt	= 0x02,		/* RO: interrupt register */};enum {					/* Rcontrol */	Rsbus		= 0x10,		/* SCSI Bus Reset */	Rint		= 0x20,		/* Interrupt Reset */	Rsoft		= 0x40,		/* Soft Reset */	Rhard		= 0x80,		/* Hard Reset */};enum {					/* Rstatus */	Cmdinv		= 0x01,		/* Command Invalid */	Dirrdy		= 0x04,		/* Data In Register Ready */	Cprbsy		= 0x08,		/* Command/Parameter Register Busy */	Hardy		= 0x10,		/* Host Adapter Ready */	Inreq		= 0x20,		/* Initialisation Required */	Dfail		= 0x40,		/* Diagnostic Failure */	Dact		= 0x80,		/* Diagnostic Active */};enum {					/* Rcpr */	Cinitialise	= 0x01,		/* Initialise Mailbox */	Cstart		= 0x02,		/* Start Mailbox Command */	Cinquiry	= 0x04,		/* Adapter Anquiry */	Ceombri		= 0x05,		/* Enable OMBR Interrupt */	Cinquire	= 0x0B,		/* Inquire Configuration */	Cextbios	= 0x28,		/* AHA-1542: extended BIOS info. */	Cmbienable	= 0x29,		/* AHA-1542: Mailbox interface enable */	Ciem		= 0x81,		/* Initialise Extended Mailbox */	Ciesi		= 0x8D,		/* Inquire Extended Setup Information */	Cerrm		= 0x8F,		/* Enable strict round-robin mode */	Cwide		= 0x96,		/* Wide CCB */};enum {					/* Rinterrupt */	Imbl		= 0x01,		/* Incoming Mailbox Loaded */	Mbor		= 0x02,		/* Mailbox Out Ready */	Cmdc		= 0x04,		/* Command Complete */	Rsts		= 0x08,		/* SCSI Reset State */	Intv		= 0x80,		/* Interrupt Valid */};typedef struct {	uchar	code;			/* action/completion code */	uchar	ccb[3];			/* CCB pointer (MSB, ..., LSB) */} Mbox24;typedef struct {	uchar	ccb[4];			/* CCB pointer (LSB, ..., MSB) */	uchar	btstat;			/* BT-7[45]7[SD] status */	uchar	sdstat;			/* SCSI device status */	uchar	pad;	uchar	code;			/* action/completion code */} Mbox32;enum {					/* mailbox commands */	Mbfree		= 0x00,		/* Mailbox not in use */	Mbostart	= 0x01,		/* Start a mailbox command */	Mboabort	= 0x02,		/* Abort a mailbox command */	Mbiok		= 0x01,		/* CCB completed without error */	Mbiabort	= 0x02,		/* CCB aborted at request of host */	Mbinx		= 0x03,		/* Aborted CCB not found */	Mbierror	= 0x04,		/* CCB completed with error */};typedef struct Ccb24 Ccb24;typedef struct Ccb32 Ccb32;typedef union Ccb Ccb;typedef struct Ccb24 {	uchar	opcode;			/* Operation code */	uchar	datadir;		/* Data direction control */	uchar	cdblen;			/* Length of CDB */	uchar	senselen;		/* Length of sense area */	uchar	datalen[3];		/* Data length (MSB, ..., LSB) */	uchar	dataptr[3];		/* Data pointer (MSB, ..., LSB) */	uchar	linkptr[3];		/* Link pointer (MSB, ..., LSB) */	uchar	linkid;			/* command linking identifier */	uchar	btstat;			/* BT-* adapter status */	uchar	sdstat;			/* SCSI device status */	uchar	reserved[2];		/* */	uchar	cs[12+0xFF];		/* Command descriptor block + Sense */	void*	data;			/* buffer if address > 24-bits */	Rendez;	int	done;			/* command completed */	Ccb*	ccb;			/* link on free list */} Ccb24;typedef struct Ccb32 {	uchar	opcode;			/* Operation code */	uchar	datadir;		/* Data direction control */	uchar	cdblen;			/* Length of CDB */	uchar	senselen;		/* Length of sense area */	uchar	datalen[4];		/* Data length (LSB, ..., MSB) */	uchar	dataptr[4];		/* Data pointer (LSB, ..., MSB) */	uchar	reserved[2];	uchar	btstat;			/* BT-* adapter status */	uchar	sdstat;			/* SCSI device status */	uchar	targetid;		/* Target ID */	uchar	luntag;			/* LUN & tag */	uchar	cdb[12];		/* Command descriptor block */	uchar	ccbctl;			/* CCB control */	uchar	linkid;			/* command linking identifier */	uchar	linkptr[4];		/* Link pointer (LSB, ..., MSB) */	uchar	senseptr[4];		/* Sense pointer (LSB, ..., MSB) */	uchar	sense[0xFF];		/* Sense bytes */	Rendez;	int	done;			/* command completed */	Ccb*	ccb;			/* link on free list */} Ccb32;typedef union Ccb {	Ccb24;	Ccb32;} Ccb;enum {					/* opcode */	OInitiator	= 0x00,		/* initiator CCB */	Ordl		= 0x03,		/* initiator CCB with					 * residual data length returned					 */};enum {					/* datadir */	CCBdatain	= 0x08,		/* inbound, length is checked */	CCBdataout	= 0x10,		/* outbound, length is checked */};enum {					/* btstat */	Eok		= 0x00,		/* normal completion with no errors */};enum {					/* luntag */	TagEnable	= 0x20,		/* Tag enable */	SQTag		= 0x00,		/* Simple Queue Tag */	HQTag		= 0x40,		/* Head of Queue Tag */	OQTag		= 0x80,		/* Ordered Queue Tag */};enum {					/* CCB control */	NoDisc		= 0x08,		/* No disconnect */	NoUnd		= 0x10,		/* No underrrun error report */	NoData		= 0x20,		/* No data transfer */	NoStat		= 0x40,		/* No CCB status if zero */	NoIntr		= 0x80,		/* No Interrupts */};typedef struct {	int	port;			/* I/O port */	int	id;			/* adapter SCSI id */	int	bus;			/* 24 or 32 -bit */	int	irq;	int	wide;	Pcidev*	pcidev;	SDev*	sdev;	int	spurious;	Lock	issuelock;	Lock	ccblock;	QLock	ccbq;	Rendez	ccbr;	Lock	mboxlock;	void*	mb;			/* mailbox out + mailbox in */	int	mbox;			/* current mailbox out index into mb */	int	mbix;			/* current mailbox in index into mb */	Lock	cachelock;	Ccb*	ccb;			/* list of free Ccb's */	Ccb**	cache;			/* last completed Ccb */} Ctlr;/* * The number of mailboxes should be a multiple of 8 (4 for Mbox32) * to ensure the boundary between the out and in mailboxes doesn't * straddle a cache-line boundary. * The number of Ccb's should be less than the number of mailboxes to * ensure no queueing is necessary on mailbox allocation. */enum {	NMbox		= 8*8,		/* number of Mbox's */	NCcb		= NMbox-1,	/* number of Ccb's */};#define PADDR24(a, n)	(PADDR(a)+n <= (1<<24))static voidccbfree(Ctlr* ctlr, Ccb* ccb){	lock(&ctlr->ccblock);	if(ctlr->bus == 24)		((Ccb24*)ccb)->ccb = ctlr->ccb;	else		((Ccb32*)ccb)->ccb = ctlr->ccb;	if(ctlr->ccb == nil)		wakeup(&ctlr->ccbr);	ctlr->ccb = ccb;	unlock(&ctlr->ccblock);}static intccbavailable(void* a){	return ((Ctlr*)a)->ccb != nil;}static Ccb*ccballoc(Ctlr* ctlr){	Ccb *ccb;	for(;;){		lock(&ctlr->ccblock);		if(ccb = ctlr->ccb){			if(ctlr->bus == 24)				 ctlr->ccb = ((Ccb24*)ccb)->ccb;			else				 ctlr->ccb = ((Ccb32*)ccb)->ccb;			unlock(&ctlr->ccblock);			break;		}		unlock(&ctlr->ccblock);		qlock(&ctlr->ccbq);		if(waserror()){			qunlock(&ctlr->ccbq);			continue;		}		sleep(&ctlr->ccbr, ccbavailable, ctlr);		qunlock(&ctlr->ccbq);		poperror();	}	return ccb;}static intdone24(void* arg){	return ((Ccb24*)arg)->done;}static intmylex24rio(SDreq* r){	ulong p;	Ctlr *ctlr;	Ccb24 *ccb;	Mbox32 *mb;	uchar *data, lun, *sense;	int d, n, btstat, sdstat, target;	ctlr = r->unit->dev->ctlr;	target = r->unit->subno;	lun = (r->cmd[1]>>5) & 0x07;	/*	 * Ctlr->cache holds the last completed Ccb for this target if it	 * returned 'check condition'.	 * If this command is a request-sense and there is valid sense data	 * from the last completed Ccb, return it immediately.	 */	lock(&ctlr->cachelock);	if(ccb = ctlr->cache[target]){		ctlr->cache[target] = nil;		if(r->cmd[0] == 0x03		  && ccb->sdstat == SDcheck && lun == ((ccb->cs[1]>>5) & 0x07)){			unlock(&ctlr->cachelock);			if(r->dlen){				sense = &ccb->cs[ccb->cdblen];				n = 8+sense[7];				if(n > r->dlen)					n = r->dlen;				memmove(r->data, sense, n);				r->rlen = n;			}			ccbfree(ctlr, (Ccb*)ccb);			return SDok;		}	}	unlock(&ctlr->cachelock);	if(ccb == nil)		ccb = ccballoc(ctlr);	/*	 * Check if the transfer is to memory above the 24-bit limit the	 * controller can address. If it is, try to allocate a temporary	 * buffer as a staging area.	 */	n = r->dlen;	if(n && !PADDR24(r->data, n)){		ccb->data = r->data;		data = mallocz(n, 0);		if(data == nil || !PADDR24(data, n)){			if(data != nil){				free(data);				ccb->data = nil;			}			ccbfree(ctlr, (Ccb*)ccb);			return SDmalloc;		}		if(r->write)			memmove(data, ccb->data, n);	}	else		data = r->data;	/*	 * Fill in the ccb.	 */	ccb->opcode = Ordl;	ccb->datadir = (target<<5)|lun;	if(n == 0)		ccb->datadir |= CCBdataout|CCBdatain;	else if(!r->write)		ccb->datadir |= CCBdatain;	else		ccb->datadir |= CCBdataout;	ccb->cdblen = r->clen;	ccb->senselen = 0xFF;	ccb->datalen[0] = n>>16;	ccb->datalen[1] = n>>8;	ccb->datalen[2] = n;	p = PADDR(data);	ccb->dataptr[0] = p>>16;	ccb->dataptr[1] = p>>8;	ccb->dataptr[2] = p;	ccb->linkptr[0] = ccb->linkptr[1] = ccb->linkptr[2] = 0;	ccb->linkid = 0;	ccb->btstat = ccb->sdstat = 0;	ccb->reserved[0] = ccb->reserved[1] = 0;	memmove(ccb->cs, r->cmd, r->clen);	/*	 * There's one more mbox than there there is	 * ccb so there is always one free.	 */	lock(&ctlr->mboxlock);	mb = ctlr->mb;	mb += ctlr->mbox;	p = PADDR(ccb);	mb->ccb[0] = p>>16;	mb->ccb[1] = p>>8;	mb->ccb[2] = p;	mb->code = Mbostart;	ctlr->mbox++;	if(ctlr->mbox >= NMbox)		ctlr->mbox = 0;	/*	 * This command does not require Hardy	 * and doesn't generate a Cmdc interrupt.	 */	ccb->done = 0;	outb(ctlr->port+Rcpr, Cstart);	unlock(&ctlr->mboxlock);	/*	 * Wait for the request to complete and return the status.	 * Since the buffer is not reference counted cannot return	 * until the DMA is done writing into the buffer so the caller	 * cannot free the buffer prematurely.	 */	while(waserror())		;	sleep(ccb, done24, ccb);	poperror();	/*	 * Save the status and patch up the number of	 * bytes actually transferred.	 * There's a firmware bug on some 956C controllers	 * which causes the return count from a successful	 * READ CAPACITY not be updated, so fix it here.	 */	sdstat = ccb->sdstat;	btstat = ccb->btstat;	d = ccb->datalen[0]<<16;	d |= ccb->datalen[1]<<8;	d |= ccb->datalen[2];	if(ccb->cs[0] == 0x25 && sdstat == SDok)		d = 0;	n -= d;	r->rlen = n;	/*	 * Tidy things up if a staging area was used for the data,	 */	if(ccb->data){		if(sdstat == SDok && btstat == 0 && !r->write)			memmove(ccb->data, data, n);		free(data);		ccb->data = nil;	}	/*	 * If there was a check-condition, save the	 * ccb for a possible request-sense command.	 */	if(sdstat == SDcheck){		if(r->flags & SDnosense){			lock(&ctlr->cachelock);			if(ctlr->cache[target])				ccbfree(ctlr, ctlr->cache[target]);			ctlr->cache[target] = (Ccb*)ccb;			unlock(&ctlr->cachelock);			return SDcheck;		}		sense = &ccb->cs[ccb->cdblen];		n = 8+sense[7];		if(n > sizeof(r->sense)-1)			n = sizeof(r->sense)-1;		memmove(r->sense, sense, n);		r->flags |= SDvalidsense;	}	ccbfree(ctlr, (Ccb*)ccb);	if(btstat){		if(btstat == 0x11)			return SDtimeout;		return SDeio;	}	return sdstat;}static voidmylex24interrupt(Ureg*, void* arg){	ulong pa;	Ctlr *ctlr;	Ccb24 *ccb;	Mbox24 *mb, *mbox;	int port, rinterrupt, rstatus;	ctlr = arg;	port = ctlr->port;	/*	 * Save and clear the interrupt(s). The only	 * interrupts expected are Cmdc, which is ignored,	 * and Imbl which means something completed.	 * There's one spurious interrupt left over from	 * initialisation, ignore it.	 */	rinterrupt = inb(port+Rinterrupt);	rstatus = inb(port+Rstatus);	outb(port+Rcontrol, Rint);	if((rinterrupt & ~(Cmdc|Imbl)) != Intv && ctlr->spurious++)		print("%s: interrupt 0x%2.2ux\n",			ctlr->sdev->name, rinterrupt);	if((rinterrupt & Cmdc) && (rstatus & Cmdinv))		print("%s: command invalid\n", ctlr->sdev->name);	/*	 * Look for something in the mail.	 * If there is, save the status, free the mailbox	 * and wakeup whoever.	 */	mb = ctlr->mb;	for(mbox = &mb[ctlr->mbix]; mbox->code; mbox = &mb[ctlr->mbix]){		pa = (mbox->ccb[0]<<16)|(mbox->ccb[1]<<8)|mbox->ccb[2];		ccb = BPA2K(pa, BUSUNKNOWN);		mbox->code = 0;		ccb->done = 1;		wakeup(ccb);		ctlr->mbix++;		if(ctlr->mbix >= NMbox+NMbox)			ctlr->mbix = NMbox;	}}static intdone32(void* arg){	return ((Ccb32*)arg)->done;}static intmylex32rio(SDreq* r){	ulong p;	uchar lun;	Ctlr *ctlr;	Ccb32 *ccb;	Mbox32 *mb;	int d, n, btstat, sdstat, target;	ctlr = r->unit->dev->ctlr;	target = r->unit->subno;	lun = (r->cmd[1]>>5) & 0x07;	/*	 * Ctlr->cache holds the last completed Ccb for this target if it	 * returned 'check condition'.	 * If this command is a request-sense and there is valid sense data	 * from the last completed Ccb, return it immediately.	 */	lock(&ctlr->cachelock);	if(ccb = ctlr->cache[target]){		ctlr->cache[target] = nil;		if(r->cmd[0] == 0x03		  && ccb->sdstat == SDcheck && lun == (ccb->luntag & 0x07)){			unlock(&ctlr->cachelock);			if(r->dlen){				n = 8+ccb->sense[7];				if(n > r->dlen)					n = r->dlen;				memmove(r->data, ccb->sense, n);				r->rlen = n;			}			ccbfree(ctlr, (Ccb*)ccb);			return SDok;		}	}	unlock(&ctlr->cachelock);	if(ccb == nil)		ccb = ccballoc(ctlr);	/*	 * Fill in the ccb.	 */	ccb->opcode = Ordl;	n = r->dlen;	if(n == 0)		ccb->datadir |= CCBdataout|CCBdatain;	else if(!r->write)		ccb->datadir |= CCBdatain;	else		ccb->datadir |= CCBdataout;	ccb->cdblen = r->clen;	ccb->datalen[0] = n;	ccb->datalen[1] = n>>8;	ccb->datalen[2] = n>>16;	ccb->datalen[3] = n>>24;	p = PADDR(r->data);	ccb->dataptr[0] = p;	ccb->dataptr[1] = p>>8;	ccb->dataptr[2] = p>>16;	ccb->dataptr[3] = p>>24;	ccb->targetid = target;	ccb->luntag = lun;	if(r->unit->inquiry[7] & 0x02)		ccb->luntag |= SQTag|TagEnable;	memmove(ccb->cdb, r->cmd, r->clen);	ccb->btstat = ccb->sdstat = 0;	ccb->ccbctl = 0;	/*	 * There's one more mbox than there there is	 * ccb so there is always one free.	 */	lock(&ctlr->mboxlock);	mb = ctlr->mb;	mb += ctlr->mbox;	p = PADDR(ccb);	mb->ccb[0] = p;	mb->ccb[1] = p>>8;	mb->ccb[2] = p>>16;	mb->ccb[3] = p>>24;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清在线精品| 精品国产髙清在线看国产毛片| 欧美日韩不卡一区二区| 久久久91精品国产一区二区精品| 一区二区在线免费观看| 国产成人av一区二区三区在线观看| 欧美日韩国产首页| 亚洲人成影院在线观看| 国产激情91久久精品导航| 欧美精品自拍偷拍| 亚洲精品精品亚洲| 成人激情动漫在线观看| 久久先锋影音av| 麻豆中文一区二区| 欧美人与z0zoxxxx视频| 亚洲在线观看免费视频| va亚洲va日韩不卡在线观看| 久久久久高清精品| 国产乱淫av一区二区三区| 日韩一区二区免费电影| 日本大胆欧美人术艺术动态| 在线影视一区二区三区| 国产精品成人免费精品自在线观看| 国产在线精品一区二区| 欧美成人精精品一区二区频| 麻豆国产精品一区二区三区| 日韩欧美一二三区| 极品瑜伽女神91| 欧美精品一区二区三区视频 | 欧美精品久久99久久在免费线| 日韩美女视频一区| 91在线观看免费视频| 亚洲欧洲日韩女同| 色综合中文综合网| 91精品国产一区二区三区香蕉| 一区二区三区四区激情| 在线一区二区观看| 午夜精品久久一牛影视| 欧美日韩高清在线播放| 麻豆一区二区三| 久久久国产午夜精品| 成人伦理片在线| 综合自拍亚洲综合图不卡区| 欧美综合在线视频| 青娱乐精品视频| 欧美成va人片在线观看| 国产精品一区二区黑丝| 中文字幕精品一区二区三区精品| 99视频国产精品| 亚洲韩国一区二区三区| 日韩欧美一区电影| 成年人国产精品| 亚洲大片免费看| 久久日一线二线三线suv| 成人国产精品视频| 亚洲一二三区不卡| 欧美大黄免费观看| 99久久综合国产精品| 亚洲www啪成人一区二区麻豆| 精品成人一区二区| 色综合色狠狠综合色| 久久9热精品视频| 国产精品国产三级国产专播品爱网 | 日韩视频中午一区| 99久久99久久精品免费观看 | 成人h版在线观看| 国产一区亚洲一区| 综合久久久久久| 4438成人网| 成年人网站91| 久久爱另类一区二区小说| 亚洲欧美电影一区二区| 欧美xxxxxxxxx| 欧美专区日韩专区| 国产成人综合精品三级| 亚洲高清视频中文字幕| 久久精品在线免费观看| 欧美裸体bbwbbwbbw| www.一区二区| 国产一区不卡在线| 日本美女视频一区二区| 一区二区三区在线观看网站| 国产欧美日韩三级| 日韩欧美一区二区久久婷婷| 91久久精品一区二区| 国产999精品久久| 日本欧美大码aⅴ在线播放| 亚洲精品v日韩精品| 国产精品理论片在线观看| 日韩色在线观看| 欧美日韩国产天堂| 色综合av在线| 99国产精品久| 99久久精品费精品国产一区二区| 国产又粗又猛又爽又黄91精品| 婷婷成人综合网| 亚洲一二三区在线观看| 一区二区三区小说| 国产精品黄色在线观看| 亚洲国产精品高清| 欧美国产日韩亚洲一区| 久久久精品国产免费观看同学| 精品久久久久久久久久久久久久久久久 | 欧美区一区二区三区| 欧美四级电影网| 色94色欧美sute亚洲13| 91国在线观看| 欧美在线视频全部完| 91久久精品一区二区三区| 91丨九色丨蝌蚪丨老版| 99re这里只有精品首页| 成人久久18免费网站麻豆| 国产成人av电影在线| 国产成人综合精品三级| 粉嫩蜜臀av国产精品网站| 丰满少妇在线播放bd日韩电影| 国产精品 日产精品 欧美精品| 国产精品99久久久久久宅男| 国产成人免费在线| 国产91对白在线观看九色| a亚洲天堂av| 欧美在线影院一区二区| 在线播放日韩导航| 欧美一级二级三级蜜桃| 久久亚洲春色中文字幕久久久| 久久噜噜亚洲综合| 国产三级精品视频| 最新日韩在线视频| 一区二区三区欧美日| 视频在线在亚洲| 国产精品资源网站| 色综合久久88色综合天天免费| 欧美三级在线看| 欧美大片日本大片免费观看| 欧美韩国日本综合| 尤物视频一区二区| 久久精品国产一区二区三区免费看 | eeuss国产一区二区三区| 在线观看国产91| 亚洲精品一区二区三区影院| 国产欧美精品一区aⅴ影院| 一个色妞综合视频在线观看| 日本中文一区二区三区| 国产成人三级在线观看| 欧美综合亚洲图片综合区| 欧美大片在线观看| 亚洲精品写真福利| 久久er精品视频| 在线中文字幕不卡| 国产亚洲一二三区| 亚洲国产日韩综合久久精品| 蜜桃视频在线一区| 一本到不卡免费一区二区| 日韩一区二区在线观看视频播放| 国产精品美女久久久久久久| 日本大胆欧美人术艺术动态| 成人动漫视频在线| 日韩三级高清在线| 自拍偷拍亚洲欧美日韩| 精品一区二区精品| 欧美在线一区二区| 中文乱码免费一区二区| 久久99精品久久久久久| 欧美在线视频你懂得| 国产精品成人一区二区艾草| 国产综合久久久久久久久久久久| 色婷婷狠狠综合| 国产精品污污网站在线观看| 美女脱光内衣内裤视频久久影院| 91视频免费播放| 久久久久久久久久久久久女国产乱| 亚洲成年人网站在线观看| 91无套直看片红桃| 中文字幕不卡一区| 国产精品一级黄| 日韩视频国产视频| 日韩二区三区在线观看| 在线观看一区二区视频| 国产精品国产三级国产三级人妇| 国产美女在线精品| 精品女同一区二区| 美女网站一区二区| 日韩欧美久久一区| 轻轻草成人在线| 91精品国产综合久久精品| 亚洲一区二区三区影院| 一本色道a无线码一区v| 亚洲欧美电影院| 91丝袜高跟美女视频| 亚洲四区在线观看| 99re热这里只有精品免费视频| 中文字幕乱码久久午夜不卡 | 亚洲天堂久久久久久久| 成人av综合一区| 国产精品理论在线观看| 成人久久18免费网站麻豆| 国产精品免费视频观看| 92国产精品观看| 一区二区视频在线| 欧美在线短视频|