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

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

?? usersu.c

?? USb in User space, a kernel module that use usb layer
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
				}				PRINT("}");			}			blocks[blockId] = (void*) db;			ritorno = 0;		}	}	db = (struct DoubleBuffT*) blocks[blockId];	if (log) {PRINT("db(%p)",db);}	/* However allocate urb separate from data. usb_buffer_alloc seem to be more complicated,	 * so we use to separe kmalloc() of mdata from data one's.*/	if (ritorno==0) {		int size, allp;		char *bf;		struct urb *urb, *curb;/*		dma_addr_t dma;*/		struct urbDataT* places;		urb = NULL; bf = NULL; curb = NULL; places = NULL;		size = ISOC_BYTESxP;		allp = ISOC_NUMBOfP;		urb = kzalloc(ISOC_URBSPRE*getUrbSize(allp), KMALLOC_FLAG);		ritorno = -ENOMEM;		if (urb) {			if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK)==USB_DIR_IN)				places = db->istream.places;			else				places = db->ostream.places;			for (l=0; l<ISOC_URBSPRE; l++) {				curb = getUrbAddr(urb,l,allp);				usb_init_urb(curb);				places[l].urb=curb;			}			if (log) {				PRINT("places=0x%p urb={",places);				for (l=0; l<ISOC_URBSPRE; l++) {					PRINT("%p ",curb);				}				PRINT("}");			}			bf = kzalloc(ISOC_URBSPRE*size*allp,KMALLOC_FLAG)/*usb_buffer_alloc(dev,ISOC_URBSPRE*size*allp,KMALLOC_FLAG,&dma)*/;			if (bf) {				for (l=0; l<ISOC_URBSPRE; l++) {					curb = getUrbAddr(urb,l,allp);					curb->transfer_buffer = bf + getUrbSize(allp)*l;/*					curb->transfer_dma = dma;					if (dma != (~(dma_addr_t) 0))						curb->transfer_dma += getUrbSize(allp)*l;*/					/* alloc_urb, if !capable for dma transfer, ret dma=-1.*/				}				if (log) {					PRINT("buff={");					for (l=0; l<ISOC_URBSPRE; l++) {						PRINT("%p ",curb->transfer_buffer);					}					PRINT("}");				}				ritorno = 0;			}		}		if (ritorno == 0) {			int k;			if (log) {PRINT("urb: filling.");}			for (l=0; l<ISOC_URBSPRE; l++) {			curb = getUrbAddr(urb,l,allp);			if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK)==USB_DIR_IN) {				curb->pipe = usb_rcvisocpipe(dev,endpoint->bEndpointAddress);				curb->context=(void*) &(db->istream);			} else {				curb->pipe = usb_sndisocpipe(dev,endpoint->bEndpointAddress);				curb->context=(void*) &(db->ostream);			}			curb->interval = endpoint->bInterval;			curb->transfer_buffer_length=allp*size;			curb->number_of_packets=allp;			curb->complete=DoubleBuff_complete;			curb->dev=dev;			curb->transfer_flags=URB_ISO_ASAP;						for (k=0; k<allp; k++) {				curb->iso_frame_desc[k].offset=k*size;				curb->iso_frame_desc[k].length=size;				curb->iso_frame_desc[k].actual_length=0;				curb->iso_frame_desc[k].status=0;			}#if 0			/* 			 * Here we only setup 'static' data for urb.			 * read()'ll be only actor that'll start urb.			 */			/* 			 * Start only input urb. If start output, we have error -22 = -EINVAL,			 * so probe'll stop with error.			 */			if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK)==USB_DIR_IN) {				nurb_submitted++;				ritorno=usb_submit_urb(curb, GFP_KERNEL);				PRINT("submit_urb...%d,",ritorno);			}#endif			} /* for (l=0, l<3, l++) */		}	}	return ritorno;}void release_nowork(struct kref *kref) {}static int DoubleBuff_disco(int blockId, struct usb_endpoint_descriptor* endpoint) {	int ritorno;	stop_submit=1;	ritorno = 0;	if (ritorno==0) {		int size, allp;		char *bf;		struct urb* urb;		struct DoubleBuffT* db;		int l;		urb = NULL; bf = NULL; db = NULL;		size = ISOC_BYTESxP;		allp = ISOC_NUMBOfP;		db = (struct DoubleBuffT*) blocks[blockId];		if (log) {PRINT("db=blocks[%d]=0x%p",blockId,blocks[blockId]);}		if (db) {			char buf[300];			struct urbDataT* ud;			ud = NULL;			if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK)==USB_DIR_IN) {				ud = &(db->istream.places[0]);				buf[0]='i';			} else {				ud = &(db->ostream.places[0]);				buf[0]='u';			}			if (log) {				PRINT("CLEAR ALL %s PLACE %p!",buf[0]=='i'?"INPUT":"OUTPUT",ud);				dumpUrbD(ud,buf,280); buf[280]='\x0'; PRINT("%s",buf);			}			urb = ud->urb;			ud->urb = NULL;		}		if (urb) bf = urb->transfer_buffer;		if (bf) {			if (log) {PRINT("CLEAR BUFF!");}			kfree(bf);/*			usb_buffer_free(dev, ISOC_URBSPRE*size*allp, bf, urb->transfer_dma);*/		}		if (urb) {			if (log) {PRINT("CLEAR URB!");}			for (l=0; l<ISOC_URBSPRE; l++)				kref_put(&(urb[l].kref), release_nowork);			kfree(urb);		}		if (((db->istream.places)[0]).urb == NULL && ((db->ostream.places)[0]).urb == NULL) {			if (log) {PRINT("CLEAR MAIN STRUCT!");}			kfree(db);			usbdo_deleteFile(endpoint->bmAttributes);			blocks[blockId] = NULL;		}	}	{		int l;		for (l=10; l<19; l++)			if (blocks[l])				break;		if (l==20) {			PRINT("set_interface()");			ritorno = usb_set_interface(dev,1,0);		}	}	return ritorno;}#if 0 /* To use with struct.pl.*/struct list_head {	struct list_head *next;	struct list_head *prev;};struct timer_list {	struct list_head list;	int expires;	int data;	void *function;};struct spinlock_t {	int lock;};struct dma_addr_t {	int dma_addr;};struct iso_packet_descriptor {	int offset;	int length;	int actual_length;	int status;};struct urb {	spinlock_t lock;	void* hcipriv;	struct list_head urb_list;	struct urb* urb_next;	struct usb_device* dev;	int pipe;	int status;	int transfer_flags;	void *transfer_buffer;	dma_addr_t transfer_dma;	int transfer_buffer_length;	int actual_length;	int bandwidth;	char *setup_packet;	dma_addr_t setup_dma;	int start_frame;	int numer_of_packets;	int interval;	int error_count;	int timeout;	void* context;	void* complete;	struct iso_packet_descriptor iso_frame_desc[0];};#endif#if 0struct usu_deviceT {	struct urb* intr_urb;	struct urb* isoc_urb;	struct urb* isoc_usc_urb;	struct dataQ_T isoc_usc_dataQ;	struct dataQ_T isoc_usc_mdataQ;	char isoc_data[3*50000];	struct usb_device *dev;	struct timer_list tempo;	struct dataQ_T isocQ_ing;	struct dataQ_T isocQ_usc;	struct dataQ_T bulkQ_ing;	struct dataQ_T intrQ_ing;	struct semaphore bulkSem;	struct semaphore intrSem;	struct proc_dir_entry* isobf;	struct proc_dir_entry* isocf;	struct proc_dir_entry* procf;	struct proc_dir_entry* procd;/*	struct circBuff intrBuffer;*/	struct endP_T isoc_usc_ep;	int intIsStopped;	int nOfZero;	spinlock_t dataav_lock;} usu_device;#endif/* About 600 char.*/int USBDo_dumpUrb(struct urb *urb,char* buf,int len) {	int l=0;	Snprintf("urb:%p",urb);	if (urb) {	Snprintf("dev:%p",urb->dev);	Snprintf("pipe:%08X",urb->pipe);	Snprintf("stat:%d",urb->status);	Snprintf("transf_flag:%08X",urb->transfer_flags);	Snprintf("transf_buff:%p",urb->transfer_buffer);	Snprintf("transf_dma:%08x",urb->transfer_dma);	Snprintf("transf_blen:%d",urb->transfer_buffer_length);	Snprintf("actual_len:%d",urb->actual_length);	Snprintf("setup_pack:%p",urb->setup_packet);	Snprintf("start_fram:%p",(void*)urb->start_frame);	Snprintf("numOf_pack:%d",urb->number_of_packets);	Snprintf("interval:%d",urb->interval);	Snprintf("erro_cnt:%d",urb->error_count);	Snprintf("context:%p",urb->context);	Snprintf("complete:%p",urb->complete);	if (urb->number_of_packets<1000 && urb->number_of_packets>0) {		int k,trx_min,trx_max,err_min,err_max;		trx_min=trx_max=0; /* !correct but adjusted in a little.*/		err_min=err_max=0;		for (k=0;k<urb->number_of_packets;k++) {			int act_len=urb->iso_frame_desc[k].actual_length;			int err_cur=urb->iso_frame_desc[k].status;			if (k) {			if (act_len>trx_max) trx_max=act_len;			if (act_len<trx_min) trx_min=act_len;			if (err_cur>err_max) err_max=err_cur;			if (err_cur<err_min) err_min=err_cur;			} else {trx_min=act_len;trx_max=act_len; err_min=err_max=err_cur;}		}		Snprintf("iso:actual_len(min,max)=(%d,%d) status(min,max)=(%d,%d)",trx_min,trx_max,err_min,err_max);	}	}	return l;}/* Send bytes syncronously to usb subsystem. *  ogf = {'\1:5'} *  ocf = ... *  data, len contain remaining bytes, *  dest = {'i', 'b'}, mean interrupt, bulk. */int USBDo_send(/*unsigned char ocf, unsigned char ogf, */struct usb_device* dv, char dest, unsigned char* data, int len) {	int ritorno=0;	int ret_len=0;	if (dev) {		if (log) PRINT("USBDo_send(dest=%c,len=%d)...",dest,len);		if (dest=='i') {		ritorno = usb_control_msg(dv,					  usb_sndctrlpipe(dev, 0),					  0,USB_TYPE_CLASS,0,0,					  data, len,					  0/* wait undef, no kill_urb() called. USB_COMMAND_TIMEOUT*/);		ret_len=ritorno;		} else if (dest=='b') {		ritorno=usb_bulk_msg(dv,				     usb_sndbulkpipe(dev, 2),				     data, len, 				     &ret_len,				     0/*5000*/);		} else {		PRINT("USBDo_send(): unrecognized dest %x\n",dest);		}		if (log) PRINT("Ok(ret %d, len %d).", ritorno,ret_len);	} else PRINT("Device4USBDo !yet recognized. No send were done.\n");	if (ritorno>=0)		ritorno=ret_len;	return ritorno;}/*  * <0 mean !found, * >=0 mean found, one can use result as index interface[]. */static unsigned int usb_if_to_ifnum(struct usb_interface *intf) {	int ritorno=-1;	int i;	struct usb_device *dev=interface_to_usbdev(intf);	for (i=0; (i<dev->actconfig->desc.bNumInterfaces) && (ritorno==-1); i++) {		if (dev->actconfig->interface[i]==intf)			ritorno=i;	}	return ritorno;}enum IntfWorkT {PROBE, DISCONNECT}; int USBDo_IntfWork(struct usb_interface *intf, enum IntfWorkT work) {	int ritorno,l;	char* tmp=NULL;	ritorno=0;	{ /* Just print header.*/		switch (work) {			case PROBE: tmp="probe"; break;			case DISCONNECT: tmp="disco"; break;			default:    tmp="unkno"; break;		}		if (dev==NULL) {			dev=usb_get_dev(interface_to_usbdev(intf));			PRINT("\nUSBDo_%s. (%x,%x)", tmp,dev->descriptor.idVendor, dev->descriptor.idProduct);		}		PRINT("\nUSBDo_%s: (dev=0x%p, interface=%d curAltSet=%d numAltSet=%d)",tmp,dev,usb_if_to_ifnum(intf),intf->cur_altsetting->desc.bAlternateSetting,intf->num_altsetting);	}	/* 1) For each endpoint provided by device.*/	for (l=0; (l<intf->cur_altsetting->desc.bNumEndpoints) && (ritorno==0) ; l++) {		struct usb_endpoint_descriptor *endpoint; 		endpoint=&(intf->cur_altsetting->endpoint[l].desc);		PRINT("\n\t(EndPAddr,bmAttr,ifNum,currAltSet,numAltSet)=(0x%x,%d,%d,%d).",			endpoint->bEndpointAddress,			endpoint->bmAttributes,			usb_if_to_ifnum(intf),			intf->num_altsetting);		/* 2) Endpoint specific code: start with searching if endpoint will to be managed.*/		{			int k;			int managed;			managed = 0;			for (k=0; k<sizeof(topol)/sizeof(struct LinkT); k++) {/*				PRINT("Comparing (%x vs %x).",endpoint->bmAttributes,topol[k].blockId[0]);*/				if (topol[k].blockId[0] == endpoint->bEndpointAddress) {					int blockId = topol[k].blockId[1];					PRINT("\n\tEndpoint managed.");					managed++;					/* 3) determine type and create object.*/					switch (work) {						case PROBE:							if (blockId>=0  && blockId<10) 							ritorno = BuffRead_probe(blockId,endpoint);							if (blockId>=10 && blockId<20)							ritorno = DoubleBuff_probe(blockId,endpoint);							break;						case DISCONNECT:							if (blockId>=0  && blockId<10) 							ritorno = BuffRead_disco(blockId,endpoint);							if (blockId>=10 && blockId<20)							ritorno = DoubleBuff_disco(blockId,endpoint);							break;					}					PRINT("ret (%d)%s",ritorno,ritorno?"ERR":"Ok");				} /* if (endpoint==managed).*/			} /* for each endpoint_managed.*/			if (!managed) PRINT("\n\tSkipped(!managed).");		} /* Endpoint specific code.*/	} /* for each endpoint exposed by device.*/	PRINT("\n/USBDo_%s=%d",tmp,ritorno);	return ritorno;}int USBDo_probe(struct usb_interface *intf, const struct usb_device_id *id_table) {	return USBDo_IntfWork(intf, PROBE);}void USBDo_deregister(struct usb_interface *intf) {	USBDo_IntfWork(intf, DISCONNECT);}/* Without this kernel never call .probe.*/MODULE_DEVICE_TABLE (usb, idta);static struct usb_driver USBDo = {	.owner = THIS_MODULE,	.name = "USBDo",	.probe = USBDo_probe, 	.disconnect = USBDo_deregister,	/*.driver_list = {0, 0},	 * without this module is loaded but !linked with device.	 */	.id_table = idta,};/* static struct usb_driver USBDo = { "name", &USBDo_probe, &USBDo_disconnect,NULL,NULL,0,NULL,NULL,NULL }; *//*  * ========================== * === Module load/unload ===  * ==========================  */int a(void) {	int ritorno=-ENOMEM;	PRINT("\n === Cerco di inserire USBDo!... === ");	ritorno=usb_register(&USBDo);	PRINT("%s.",ritorno?"Err!":"Ok");	PRINT("ret (%d)", ritorno);	return ritorno;}void b(void) {	PRINT("\nDeregistro USBDo!...");	usb_deregister(&USBDo);/*	USBDo_deregister(); without interface, we do not know what delete. NULL can be delete all. *	Is >simple to remeber all intf during probe. Perhaps usb layer have a list for such object. * *	First deregister, then wait urb to complete. If invert operation urb never complete.*/	PRINT("Ok");	{		int k;#if 0		int blocksAllocated=0;		for (k=0; k<sizeof(blocks)/sizeof(blocks[0]); k++)			if (blocks[k])				blocksAllocated++;		if (blocksAllocated==0) {			PRINT("Removing /proc/USBDo");			remove_proc_entry("USBDo",NULL);			usbdo_fs = NULL;		}#endif		PRINT("Waiting for %d urb to complete...",nurb_submitted);		k=100;		while (nurb_submitted>0 && k--)			mdelay(10);				PRINT("Ok");		if (nurb_submitted) PRINT(" %d URB REMAIN SUBMITTED.",nurb_submitted);	}}module_init(a);module_exit(b);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品久久久久久清纯| 国产欧美一二三区| 调教+趴+乳夹+国产+精品| xvideos.蜜桃一区二区| 色噜噜狠狠成人中文综合| 日韩高清不卡在线| 综合自拍亚洲综合图不卡区| 精品国产伦理网| 国产欧美日韩综合| 久久精品亚洲精品国产欧美| 在线观看一区二区视频| 成人午夜免费视频| 经典三级视频一区| 91麻豆文化传媒在线观看| 欧美亚洲一区二区三区四区| 国产成人精品亚洲日本在线桃色| 午夜视频久久久久久| 午夜精品一区二区三区电影天堂| 性欧美疯狂xxxxbbbb| 亚洲色图另类专区| 一区二区三区在线观看国产| 中文字幕亚洲一区二区av在线| 精品1区2区在线观看| 久久亚洲免费视频| ●精品国产综合乱码久久久久| 亚洲精品第1页| 亚洲欧洲国产日本综合| 亚洲乱码国产乱码精品精可以看| 亚洲一区国产视频| 亚洲男同性恋视频| 日韩伦理免费电影| 亚洲18女电影在线观看| 激情图片小说一区| 亚洲成a人v欧美综合天堂| 琪琪一区二区三区| 美女一区二区三区在线观看| 日韩专区一卡二卡| 婷婷丁香久久五月婷婷| 欧美午夜精品一区二区三区| 亚洲444eee在线观看| 麻豆精品蜜桃视频网站| 国产91精品一区二区麻豆网站| 欧美中文字幕亚洲一区二区va在线 | 久久久久九九视频| 日韩欧美高清dvd碟片| 69久久夜色精品国产69蝌蚪网 | 国产精品嫩草99a| 国产日韩欧美综合一区| 一区二区三区四区亚洲| 青草av.久久免费一区| 成人性色生活片| 91麻豆精品国产91久久久资源速度 | 2021国产精品久久精品| 亚洲色图在线看| 黑人巨大精品欧美黑白配亚洲| 99国产精品久久久久久久久久 | 成人精品国产一区二区4080| 国产精品主播直播| 国产成人免费av在线| 在线影院国内精品| 久久久久久97三级| 亚洲444eee在线观看| 精品奇米国产一区二区三区| 久久综合九色综合欧美98 | 国产一区二区三区久久久| 国产精品亚洲综合一区在线观看| 91黄色激情网站| 欧美极品aⅴ影院| 亚洲精品伦理在线| 国产精品资源在线看| 欧美女孩性生活视频| 精品国产伦一区二区三区观看方式 | 日韩影院精彩在线| 91免费国产在线观看| 亚洲精品一区二区三区蜜桃下载| 国产一区二区三区四区五区入口| 一本大道久久精品懂色aⅴ| 成人网在线播放| 日韩欧美你懂的| 亚洲午夜久久久| 黄一区二区三区| 在线不卡免费av| 欧美国产日韩亚洲一区| 久草精品在线观看| 91精品国产91久久久久久最新毛片| 欧美一区二区三区思思人| 亚洲激情图片小说视频| 成a人片国产精品| 国产亚洲精品精华液| 精品亚洲成a人在线观看 | 日本一区二区视频在线| 国产真实乱子伦精品视频| 日韩欧美一区二区不卡| 日本欧美肥老太交大片| 欧美人牲a欧美精品| 美女网站色91| 欧美伊人久久大香线蕉综合69| 亚洲人成影院在线观看| 精品国产乱子伦一区| 日韩理论片中文av| 成人av电影在线观看| 久久久久9999亚洲精品| 精品一二三四区| 久久尤物电影视频在线观看| 久久99久久精品| 欧美大片在线观看一区二区| 日本欧美加勒比视频| 91精品国产高清一区二区三区 | 久久精品国产成人一区二区三区| 成人免费福利片| 中文字幕欧美国产| www.久久精品| 欧美一激情一区二区三区| 亚洲乱码国产乱码精品精可以看| 色综合久久综合网欧美综合网 | 日本成人中文字幕在线视频| 欧美一区二区在线免费观看| 日本不卡一二三| 欧美成人女星排名| 国产一区二区免费看| 国产视频在线观看一区二区三区 | 黄页网站大全一区二区| 国产盗摄一区二区| bt欧美亚洲午夜电影天堂| 中文字幕第一区第二区| 成人av电影免费观看| 亚洲精品视频在线观看网站| 欧美影视一区二区三区| 日本视频一区二区| 欧美videofree性高清杂交| 国产成人精品一区二区三区网站观看| 日本一区二区高清| 国产亚洲美州欧州综合国| 成人一级视频在线观看| 亚洲精品少妇30p| 91精品综合久久久久久| 国产乱码精品1区2区3区| 最新久久zyz资源站| 欧美色综合天天久久综合精品| 麻豆国产精品官网| 国产精品免费免费| 欧美男生操女生| 国产东北露脸精品视频| 亚洲影院久久精品| 久久亚洲春色中文字幕久久久| 99在线精品观看| 免费在线视频一区| 国产精品久久久久久久久果冻传媒 | 色哟哟一区二区在线观看| 午夜在线成人av| 久久久电影一区二区三区| 色94色欧美sute亚洲线路二| 久久精品国产99国产精品| ...xxx性欧美| 亚洲综合色在线| 51精品久久久久久久蜜臀| 国产成人av福利| 午夜欧美在线一二页| 国产欧美日韩亚州综合| 亚洲精品国久久99热| 日韩欧美国产一区在线观看| av中文字幕不卡| 久久激五月天综合精品| 一区二区三区资源| 国产丝袜在线精品| 91精品国产一区二区三区蜜臀| hitomi一区二区三区精品| 日本不卡不码高清免费观看| 亚洲精品午夜久久久| 久久久久一区二区三区四区| 欧美日韩国产一区| av一区二区三区黑人| 久久aⅴ国产欧美74aaa| 亚洲男人的天堂在线aⅴ视频| 久久影院午夜论| 日韩午夜电影av| 在线观看网站黄不卡| 国产+成+人+亚洲欧洲自线| 美腿丝袜亚洲一区| 亚洲va欧美va天堂v国产综合| 中文字幕在线不卡一区| 国产亚洲一区字幕| 欧美电影在哪看比较好| 色先锋aa成人| 成人黄色片在线观看| 国产剧情一区二区| 久久精品理论片| 日韩电影在线一区二区三区| 亚洲一级不卡视频| 亚洲另类在线一区| 91色婷婷久久久久合中文| 国产欧美日本一区二区三区| 制服丝袜激情欧洲亚洲| 欧美亚洲综合另类| 一本大道av一区二区在线播放| 国产精品99久久久| 国产乱码精品1区2区3区| 精品一二线国产| 精品一区二区三区影院在线午夜| 琪琪久久久久日韩精品|