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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dvb-usb-urb.c

?? linux2.6.16版本
?? C
字號(hào):
/* dvb-usb-urb.c is part of the DVB USB library. * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) * see dvb-usb-init.c for copyright information. * * This file contains functions for initializing and handling the * USB and URB stuff. */#include "dvb-usb-common.h"int dvb_usb_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf,	u16 rlen, int delay_ms){	int actlen,ret = -ENOMEM;	if (d->props.generic_bulk_ctrl_endpoint == 0) {		err("endpoint for generic control not specified.");		return -EINVAL;	}	if (wbuf == NULL || wlen == 0)		return -EINVAL;	if ((ret = down_interruptible(&d->usb_sem)))		return ret;	deb_xfer(">>> ");	debug_dump(wbuf,wlen,deb_xfer);	ret = usb_bulk_msg(d->udev,usb_sndbulkpipe(d->udev,			d->props.generic_bulk_ctrl_endpoint), wbuf,wlen,&actlen,			2000);	if (ret)		err("bulk message failed: %d (%d/%d)",ret,wlen,actlen);	else		ret = actlen != wlen ? -1 : 0;	/* an answer is expected, and no error before */	if (!ret && rbuf && rlen) {		if (delay_ms)			msleep(delay_ms);		ret = usb_bulk_msg(d->udev,usb_rcvbulkpipe(d->udev,				d->props.generic_bulk_ctrl_endpoint),rbuf,rlen,&actlen,				2000);		if (ret)			err("recv bulk message failed: %d",ret);		else {			deb_xfer("<<< ");			debug_dump(rbuf,actlen,deb_xfer);		}	}	up(&d->usb_sem);	return ret;}EXPORT_SYMBOL(dvb_usb_generic_rw);int dvb_usb_generic_write(struct dvb_usb_device *d, u8 *buf, u16 len){	return dvb_usb_generic_rw(d,buf,len,NULL,0,0);}EXPORT_SYMBOL(dvb_usb_generic_write);/* URB stuff for streaming */static void dvb_usb_urb_complete(struct urb *urb, struct pt_regs *ptregs){	struct dvb_usb_device *d = urb->context;	int ptype = usb_pipetype(urb->pipe);	int i;	u8 *b;	deb_ts("'%s' urb completed. feedcount: %d, status: %d, length: %d/%d, pack_num: %d, errors: %d\n",			ptype == PIPE_ISOCHRONOUS ? "isoc" : "bulk", d->feedcount,			urb->status,urb->actual_length,urb->transfer_buffer_length,			urb->number_of_packets,urb->error_count);	switch (urb->status) {		case 0:         /* success */		case -ETIMEDOUT:    /* NAK */			break;		case -ECONNRESET:   /* kill */		case -ENOENT:		case -ESHUTDOWN:			return;		default:        /* error */			deb_ts("urb completition error %d.", urb->status);			break;	}	if (d->feedcount > 0) {		if (d->state & DVB_USB_STATE_DVB) {			switch (ptype) {				case PIPE_ISOCHRONOUS:					b = (u8 *) urb->transfer_buffer;					for (i = 0; i < urb->number_of_packets; i++) {						if (urb->iso_frame_desc[i].status != 0)							deb_ts("iso frame descriptor has an error: %d\n",urb->iso_frame_desc[i].status);						else if (urb->iso_frame_desc[i].actual_length > 0) {								dvb_dmx_swfilter(&d->demux,b + urb->iso_frame_desc[i].offset,										urb->iso_frame_desc[i].actual_length);							}						urb->iso_frame_desc[i].status = 0;						urb->iso_frame_desc[i].actual_length = 0;					}					debug_dump(b,20,deb_ts);					break;				case PIPE_BULK:					if (urb->actual_length > 0)						dvb_dmx_swfilter(&d->demux, (u8 *) urb->transfer_buffer,urb->actual_length);					break;				default:					err("unkown endpoint type in completition handler.");					return;			}		}	}	usb_submit_urb(urb,GFP_ATOMIC);}int dvb_usb_urb_kill(struct dvb_usb_device *d){	int i;	for (i = 0; i < d->urbs_submitted; i++) {		deb_ts("killing URB no. %d.\n",i);		/* stop the URB */		usb_kill_urb(d->urb_list[i]);	}	d->urbs_submitted = 0;	return 0;}int dvb_usb_urb_submit(struct dvb_usb_device *d){	int i,ret;	for (i = 0; i < d->urbs_initialized; i++) {		deb_ts("submitting URB no. %d\n",i);		if ((ret = usb_submit_urb(d->urb_list[i],GFP_ATOMIC))) {			err("could not submit URB no. %d - get them all back",i);			dvb_usb_urb_kill(d);			return ret;		}		d->urbs_submitted++;	}	return 0;}static int dvb_usb_free_stream_buffers(struct dvb_usb_device *d){	if (d->state & DVB_USB_STATE_URB_BUF) {		while (d->buf_num) {			d->buf_num--;			deb_mem("freeing buffer %d\n",d->buf_num);			usb_buffer_free(d->udev, d->buf_size,					d->buf_list[d->buf_num], d->dma_addr[d->buf_num]);		}		kfree(d->buf_list);		kfree(d->dma_addr);	}	d->state &= ~DVB_USB_STATE_URB_BUF;	return 0;}static int dvb_usb_allocate_stream_buffers(struct dvb_usb_device *d, int num, unsigned long size){	d->buf_num = 0;	d->buf_size = size;	deb_mem("all in all I will use %lu bytes for streaming\n",num*size);	if ((d->buf_list = kcalloc(num, sizeof(u8 *), GFP_ATOMIC)) == NULL)		return -ENOMEM;	if ((d->dma_addr = kcalloc(num, sizeof(dma_addr_t), GFP_ATOMIC)) == NULL) {		kfree(d->buf_list);		return -ENOMEM;	}	d->state |= DVB_USB_STATE_URB_BUF;	for (d->buf_num = 0; d->buf_num < num; d->buf_num++) {		deb_mem("allocating buffer %d\n",d->buf_num);		if (( d->buf_list[d->buf_num] =					usb_buffer_alloc(d->udev, size, SLAB_ATOMIC,					&d->dma_addr[d->buf_num]) ) == NULL) {			deb_mem("not enough memory for urb-buffer allocation.\n");			dvb_usb_free_stream_buffers(d);			return -ENOMEM;		}		deb_mem("buffer %d: %p (dma: %llu)\n",			d->buf_num, d->buf_list[d->buf_num],			(unsigned long long)d->dma_addr[d->buf_num]);		memset(d->buf_list[d->buf_num],0,size);	}	deb_mem("allocation successful\n");	return 0;}static int dvb_usb_bulk_urb_init(struct dvb_usb_device *d){	int i;	if ((i = dvb_usb_allocate_stream_buffers(d,d->props.urb.count,					d->props.urb.u.bulk.buffersize)) < 0)		return i;	/* allocate the URBs */	for (i = 0; i < d->props.urb.count; i++) {		if ((d->urb_list[i] = usb_alloc_urb(0,GFP_ATOMIC)) == NULL)			return -ENOMEM;		usb_fill_bulk_urb( d->urb_list[i], d->udev,				usb_rcvbulkpipe(d->udev,d->props.urb.endpoint),				d->buf_list[i],				d->props.urb.u.bulk.buffersize,				dvb_usb_urb_complete, d);		d->urb_list[i]->transfer_flags = 0;		d->urbs_initialized++;	}	return 0;}static int dvb_usb_isoc_urb_init(struct dvb_usb_device *d){	int i,j;	if ((i = dvb_usb_allocate_stream_buffers(d,d->props.urb.count,					d->props.urb.u.isoc.framesize*d->props.urb.u.isoc.framesperurb)) < 0)		return i;	/* allocate the URBs */	for (i = 0; i < d->props.urb.count; i++) {		struct urb *urb;		int frame_offset = 0;		if ((d->urb_list[i] =					usb_alloc_urb(d->props.urb.u.isoc.framesperurb,GFP_ATOMIC)) == NULL)			return -ENOMEM;		urb = d->urb_list[i];		urb->dev = d->udev;		urb->context = d;		urb->complete = dvb_usb_urb_complete;		urb->pipe = usb_rcvisocpipe(d->udev,d->props.urb.endpoint);		urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;		urb->interval = d->props.urb.u.isoc.interval;		urb->number_of_packets = d->props.urb.u.isoc.framesperurb;		urb->transfer_buffer_length = d->buf_size;		urb->transfer_buffer = d->buf_list[i];		urb->transfer_dma = d->dma_addr[i];		for (j = 0; j < d->props.urb.u.isoc.framesperurb; j++) {			urb->iso_frame_desc[j].offset = frame_offset;			urb->iso_frame_desc[j].length = d->props.urb.u.isoc.framesize;			frame_offset += d->props.urb.u.isoc.framesize;		}		d->urbs_initialized++;	}	return 0;}int dvb_usb_urb_init(struct dvb_usb_device *d){	/*	 * when reloading the driver w/o replugging the device	 * sometimes a timeout occures, this helps	 */	if (d->props.generic_bulk_ctrl_endpoint != 0) {		usb_clear_halt(d->udev,usb_sndbulkpipe(d->udev,d->props.generic_bulk_ctrl_endpoint));		usb_clear_halt(d->udev,usb_rcvbulkpipe(d->udev,d->props.generic_bulk_ctrl_endpoint));	}	usb_clear_halt(d->udev,usb_rcvbulkpipe(d->udev,d->props.urb.endpoint));	/* allocate the array for the data transfer URBs */	d->urb_list = kzalloc(d->props.urb.count * sizeof(struct urb *),GFP_KERNEL);	if (d->urb_list == NULL)		return -ENOMEM;	d->state |= DVB_USB_STATE_URB_LIST;	switch (d->props.urb.type) {		case DVB_USB_BULK:			return dvb_usb_bulk_urb_init(d);		case DVB_USB_ISOC:			return dvb_usb_isoc_urb_init(d);		default:			err("unkown URB-type for data transfer.");			return -EINVAL;	}}int dvb_usb_urb_exit(struct dvb_usb_device *d){	int i;	dvb_usb_urb_kill(d);	if (d->state & DVB_USB_STATE_URB_LIST) {		for (i = 0; i < d->urbs_initialized; i++) {			if (d->urb_list[i] != NULL) {				deb_mem("freeing URB no. %d.\n",i);				/* free the URBs */				usb_free_urb(d->urb_list[i]);			}		}		d->urbs_initialized = 0;		/* free the urb array */		kfree(d->urb_list);		d->state &= ~DVB_USB_STATE_URB_LIST;	}	dvb_usb_free_stream_buffers(d);	return 0;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产色综合久久不卡蜜臀 | 极品少妇xxxx精品少妇| 狠狠v欧美v日韩v亚洲ⅴ| 99在线热播精品免费| 91精品在线免费观看| 亚洲美女在线一区| 国产乱理伦片在线观看夜一区| 色综合久久久网| 久久一日本道色综合| 亚洲国产精品精华液网站| jizz一区二区| 国产欧美中文在线| 国内精品嫩模私拍在线| 欧美精品高清视频| 悠悠色在线精品| 91视频在线观看免费| 久久久久久麻豆| 日本少妇一区二区| 欧美久久久久中文字幕| 性久久久久久久久久久久| 色香蕉久久蜜桃| 亚洲精品免费一二三区| www.视频一区| 亚洲天天做日日做天天谢日日欢| 国产精品亚洲综合一区在线观看| 精品国内二区三区| 麻豆国产欧美日韩综合精品二区| 欧美自拍偷拍一区| 亚洲一区二区三区中文字幕| 91影院在线观看| 一区二区三区自拍| 欧美撒尿777hd撒尿| 一区二区三区产品免费精品久久75| 成人黄色免费短视频| 久久久综合九色合综国产精品| 麻豆国产91在线播放| 日韩精品专区在线| 久久国产剧场电影| 久久综合色一综合色88| 精品一区二区精品| 久久精品亚洲麻豆av一区二区| 国产一区二区伦理片| 国产欧美日韩在线观看| 成人av在线一区二区三区| 亚洲人成网站色在线观看| 91久久线看在观草草青青| 午夜久久福利影院| 欧美mv和日韩mv国产网站| 国产一区二区三区高清播放| 国产精品色哟哟网站| 91丨porny丨国产| 首页欧美精品中文字幕| 日韩欧美一区电影| 国产99久久久国产精品免费看| 国产精品久久毛片| 欧美精品777| 国产中文字幕一区| 亚洲三级电影网站| 91精品欧美一区二区三区综合在| 美女视频网站久久| 国产精品久久久久影院亚瑟| 91捆绑美女网站| 亚洲国产欧美一区二区三区丁香婷| 久久99国内精品| 中文字幕一区二区三区不卡在线| 欧洲精品一区二区| 欧美哺乳videos| 91在线你懂得| 久久精品久久久精品美女| 中文字幕在线一区免费| 91精品久久久久久久99蜜桃| 美腿丝袜一区二区三区| 国产精品久久免费看| 日韩欧美久久久| 色婷婷精品大视频在线蜜桃视频| 免费在线观看日韩欧美| 国产精品久久久久久久久快鸭 | 国产真实乱子伦精品视频| 亚洲欧美视频在线观看| 久久综合色8888| 欧美三级在线看| 99久久精品国产一区二区三区| 欧美96一区二区免费视频| 国产精品美女一区二区| 精品日产卡一卡二卡麻豆| 欧美主播一区二区三区美女| 国产成人av影院| 综合自拍亚洲综合图不卡区| 欧美日韩1234| 93久久精品日日躁夜夜躁欧美| 久久成人精品无人区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美三级电影一区| 91在线无精精品入口| 国产一区二区三区在线观看免费视频 | 国产麻豆精品一区二区| 天堂资源在线中文精品| 亚洲欧美另类久久久精品2019| 久久伊人中文字幕| 欧美r级电影在线观看| 日韩午夜av电影| 日韩一区二区在线看| 欧美视频在线一区二区三区| 色婷婷激情综合| 日本道色综合久久| 欧美在线影院一区二区| 91美女蜜桃在线| 久久久久青草大香线综合精品| 免费在线观看一区二区三区| 亚洲一区在线播放| 日本一区二区三区电影| 久久日韩精品一区二区五区| 337p日本欧洲亚洲大胆色噜噜| 日韩精品专区在线影院重磅| 欧美变态口味重另类| www亚洲一区| 中文字幕不卡在线播放| 中文欧美字幕免费| 亚洲女同一区二区| 亚洲第一在线综合网站| 亚洲成人精品在线观看| 日韩不卡一区二区三区| 麻豆精品久久精品色综合| 久久福利资源站| 国产成人自拍高清视频在线免费播放| 国产精品一区二区久激情瑜伽| 国产精品白丝jk白祙喷水网站| 国产乱人伦偷精品视频不卡| 国产suv精品一区二区6| 成人国产精品视频| 97久久精品人人做人人爽| 国内精品伊人久久久久影院对白| 韩国成人精品a∨在线观看| 国产成人一级电影| 不卡的av网站| 欧美日韩美少妇| 日韩一区二区三区在线观看| www激情久久| 欧美成人vps| 中文字幕一区免费在线观看| 亚洲最色的网站| 久久99国产精品尤物| 国产69精品久久久久毛片| 91成人网在线| 精品久久久久香蕉网| 国产精品的网站| 日韩 欧美一区二区三区| 国产成人精品一区二区三区网站观看| 不卡电影一区二区三区| 欧美美女直播网站| 国产女同互慰高潮91漫画| 亚洲二区在线视频| 国产成人无遮挡在线视频| 色综合久久精品| 欧美成人精品福利| 亚洲欧美日韩国产一区二区三区 | 东方aⅴ免费观看久久av| 在线一区二区视频| 精品sm在线观看| 亚洲自拍偷拍图区| 国产91精品一区二区麻豆亚洲| 91丨porny丨首页| 国产人成一区二区三区影院| 亚洲国产精品一区二区久久恐怖片 | 国产美女视频91| 欧美日韩国产小视频| 国产精品色在线观看| 久久精品国产亚洲一区二区三区| 成人激情免费网站| 日韩三级免费观看| 亚洲成人av中文| 播五月开心婷婷综合| 婷婷开心久久网| 午夜精品久久久久影视| 五月天网站亚洲| 亚洲高清视频的网址| 免费不卡在线观看| 国内精品国产成人国产三级粉色 | 91丨porny丨国产入口| 久久综合色一综合色88| 一区二区三区在线免费播放| 日韩av一区二| 色国产精品一区在线观看| 色婷婷国产精品综合在线观看| 欧美日产在线观看| 亚洲成人激情社区| 欧美性色黄大片| 亚洲免费大片在线观看| 91在线视频免费91| 中文字幕中文在线不卡住| 国产成人免费9x9x人网站视频| 日韩欧美国产午夜精品| 石原莉奈在线亚洲二区| 欧美婷婷六月丁香综合色| 亚洲欧美视频在线观看视频| 成人午夜看片网址| 亚洲一区二区四区蜜桃| 91在线免费看| 亚洲男人的天堂在线观看| 国产99一区视频免费|