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

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

?? usb.h

?? linux驅(qū)動(dòng)開發(fā)代碼
?? H
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	/*	 * if device class != 0, these can be match criteria;	 * but only if this bDeviceClass value is nonzero	 */	__u8		bDeviceClass;	__u8		bDeviceSubClass;	__u8		bDeviceProtocol;	/*	 * if interface class != 0, these can be match criteria;	 * but only if this bInterfaceClass value is nonzero	 */	__u8		bInterfaceClass;	__u8		bInterfaceSubClass;	__u8		bInterfaceProtocol;	/*	 * for driver's use; not involved in driver matching.	 */	unsigned long	driver_info;};/** * struct usb_driver - identifies USB driver to usbcore * @owner: Pointer to the module owner of this driver; initialize *      it using THIS_MODULE. * @name: The driver name should be unique among USB drivers, *      and should normally be the same as the module name. * @probe: Called to see if the driver is willing to manage a particular *      interface on a device.  The probe routine returns a handle that  *      will later be provided to disconnect(), or a null pointer to *      indicate that the driver will not handle the interface. *      The handle is normally a pointer to driver-specific data. *      If the probe() routine needs to access the interface *      structure itself, use usb_ifnum_to_if() to make sure it's using *      the right one. * @disconnect: Called when the interface is no longer accessible, usually *      because its device has been (or is being) disconnected.  The *      handle passed is what was returned by probe(), or was provided *      to usb_driver_claim_interface(). * @ioctl: Used for drivers that want to talk to userspace through *      the "usbfs" filesystem.  This lets devices provide ways to *      expose information to user space regardless of where they *      do (or don't) show up otherwise in the filesystem. * @fops: pointer to a fops structure if the driver wants to use the USB *	major number. * @minor: the starting minor number for this driver, if the fops *	pointer is set. * @id_table: USB drivers use ID table to support hotplugging. *      Export this with MODULE_DEVICE_TABLE(usb,...), or use NULL to *      say that probe() should be called for any unclaimed interface. * * USB drivers must provide a name, probe() and disconnect() methods, * and an id_table.  Other driver fields are optional. * * The id_table is used in hotplugging.  It holds a set of descriptors, * and specialized data may be associated with each entry.  That table * is used by both user and kernel mode hotplugging support. * The probe() and disconnect() methods are called in a context where * they can sleep, but they should avoid abusing the privilege.  Most * work to connect to a device should be done when the device is opened, * and undone at the last close.  The disconnect code needs to address * concurrency issues with respect to open() and close() methods, as * well as forcing all pending I/O requests to complete (by unlinking * them as necessary, and blocking until the unlinks complete). */struct usb_driver {	struct module *owner;	const char *name;	void *(*probe)(	    struct usb_device *dev,		/* the device */	    unsigned intf,			/* what interface */	    const struct usb_device_id *id	/* from id_table */	    );	void (*disconnect)(struct usb_device *, void *);	struct list_head driver_list;	struct file_operations *fops;	int minor;	struct semaphore serialize;	int (*ioctl)(struct usb_device *dev, unsigned int code, void *buf);	const struct usb_device_id *id_table;};	/*----------------------------------------------------------------------------*  * New USB Structures                                                         * *----------------------------------------------------------------------------*//* * urb->transfer_flags: */#define USB_DISABLE_SPD		0x0001#define URB_SHORT_NOT_OK	USB_DISABLE_SPD#define USB_ISO_ASAP		0x0002#define USB_ASYNC_UNLINK	0x0008#define USB_QUEUE_BULK		0x0010#define USB_NO_FSBR		0x0020#define USB_ZERO_PACKET		0x0040  // Finish bulk OUTs always with zero length packet#define URB_NO_INTERRUPT	0x0080	/* HINT: no non-error interrupt needed */					/* ... less overhead for QUEUE_BULK */#define USB_TIMEOUT_KILLED	0x1000	// only set by HCD!struct iso_packet_descriptor{	unsigned int offset;	unsigned int length;		// expected length	unsigned int actual_length;	unsigned int status;};#define usb_iso_packet_descriptor	iso_packet_descriptorstruct urb;typedef void (*usb_complete_t)(struct urb *);struct urb{	spinlock_t lock;		// lock for the URB	void *hcpriv;			// private data for host controller	struct list_head urb_list;	// list pointer to all active urbs 	struct urb *next;		// pointer to next URB		struct usb_device *dev;		// pointer to associated USB device	unsigned int pipe;		// pipe information	int status;			// returned status	unsigned int transfer_flags;	// USB_DISABLE_SPD | USB_ISO_ASAP | etc.	void *transfer_buffer;		// associated data buffer	dma_addr_t transfer_dma;	// dma addr for transfer_buffer	int transfer_buffer_length;	// data buffer length	int actual_length;              // actual data buffer length		int bandwidth;			// bandwidth for this transfer request (INT or ISO)	unsigned char *setup_packet;	// setup packet (control only)	dma_addr_t setup_dma;		// dma addr for setup_packet	//	int start_frame;		// start frame (iso/irq only)	int number_of_packets;		// number of packets in this request (iso)	int interval;                   // polling interval (irq only)	int error_count;		// number of errors in this transfer (iso only)	int timeout;			// timeout (in jiffies)	//	void *context;			// context for completion routine	usb_complete_t complete;	// pointer to completion routine	//	struct iso_packet_descriptor iso_frame_desc[0];};/** * FILL_CONTROL_URB - macro to help initialize a control urb * @URB: pointer to the urb to initialize. * @DEV: pointer to the struct usb_device for this urb. * @PIPE: the endpoint pipe * @SETUP_PACKET: pointer to the setup_packet buffer * @TRANSFER_BUFFER: pointer to the transfer buffer * @BUFFER_LENGTH: length of the transfer buffer * @COMPLETE: pointer to the usb_complete_t function * @CONTEXT: what to set the urb context to. * * Initializes a control urb with the proper information needed to submit * it to a device.  This macro is depreciated, the usb_fill_control_urb() * function should be used instead. */#define FILL_CONTROL_URB(URB,DEV,PIPE,SETUP_PACKET,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT) \    do {\	spin_lock_init(&(URB)->lock);\	(URB)->dev=DEV;\	(URB)->pipe=PIPE;\	(URB)->setup_packet=SETUP_PACKET;\	(URB)->transfer_buffer=TRANSFER_BUFFER;\	(URB)->transfer_buffer_length=BUFFER_LENGTH;\	(URB)->complete=COMPLETE;\	(URB)->context=CONTEXT;\    } while (0)/** * FILL_BULK_URB - macro to help initialize a bulk urb * @URB: pointer to the urb to initialize. * @DEV: pointer to the struct usb_device for this urb. * @PIPE: the endpoint pipe * @TRANSFER_BUFFER: pointer to the transfer buffer * @BUFFER_LENGTH: length of the transfer buffer * @COMPLETE: pointer to the usb_complete_t function * @CONTEXT: what to set the urb context to. * * Initializes a bulk urb with the proper information needed to submit it * to a device.  This macro is depreciated, the usb_fill_bulk_urb() * function should be used instead. */#define FILL_BULK_URB(URB,DEV,PIPE,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT) \    do {\	spin_lock_init(&(URB)->lock);\	(URB)->dev=DEV;\	(URB)->pipe=PIPE;\	(URB)->transfer_buffer=TRANSFER_BUFFER;\	(URB)->transfer_buffer_length=BUFFER_LENGTH;\	(URB)->complete=COMPLETE;\	(URB)->context=CONTEXT;\    } while (0)    /** * FILL_INT_URB - macro to help initialize a interrupt urb * @URB: pointer to the urb to initialize. * @DEV: pointer to the struct usb_device for this urb. * @PIPE: the endpoint pipe * @TRANSFER_BUFFER: pointer to the transfer buffer * @BUFFER_LENGTH: length of the transfer buffer * @COMPLETE: pointer to the usb_complete_t function * @CONTEXT: what to set the urb context to. * @INTERVAL: what to set the urb interval to. * * Initializes a interrupt urb with the proper information needed to submit * it to a device.  This macro is depreciated, the usb_fill_int_urb() * function should be used instead. */#define FILL_INT_URB(URB,DEV,PIPE,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT,INTERVAL) \    do {\	spin_lock_init(&(URB)->lock);\	(URB)->dev=DEV;\	(URB)->pipe=PIPE;\	(URB)->transfer_buffer=TRANSFER_BUFFER;\	(URB)->transfer_buffer_length=BUFFER_LENGTH;\	(URB)->complete=COMPLETE;\	(URB)->context=CONTEXT;\	(URB)->interval=INTERVAL;\	(URB)->start_frame=-1;\    } while (0)#define FILL_CONTROL_URB_TO(a,aa,b,c,d,e,f,g,h) \    do {\	spin_lock_init(&(a)->lock);\	(a)->dev=aa;\	(a)->pipe=b;\	(a)->setup_packet=c;\	(a)->transfer_buffer=d;\	(a)->transfer_buffer_length=e;\	(a)->complete=f;\	(a)->context=g;\	(a)->timeout=h;\    } while (0)#define FILL_BULK_URB_TO(a,aa,b,c,d,e,f,g) \    do {\	spin_lock_init(&(a)->lock);\	(a)->dev=aa;\	(a)->pipe=b;\	(a)->transfer_buffer=c;\	(a)->transfer_buffer_length=d;\	(a)->complete=e;\	(a)->context=f;\	(a)->timeout=g;\    } while (0) /** * usb_fill_control_urb - initializes a control urb * @urb: pointer to the urb to initialize. * @dev: pointer to the struct usb_device for this urb. * @pipe: the endpoint pipe * @setup_packet: pointer to the setup_packet buffer * @transfer_buffer: pointer to the transfer buffer * @buffer_length: length of the transfer buffer * @complete: pointer to the usb_complete_t function * @context: what to set the urb context to. * * Initializes a control urb with the proper information needed to submit * it to a device. */static inline void usb_fill_control_urb (struct urb *urb,					 struct usb_device *dev,					 unsigned int pipe,					 unsigned char *setup_packet,					 void *transfer_buffer,					 int buffer_length,					 usb_complete_t complete,					 void *context){	spin_lock_init(&urb->lock);	urb->dev = dev;	urb->pipe = pipe;	urb->setup_packet = setup_packet;	urb->transfer_buffer = transfer_buffer;	urb->transfer_buffer_length = buffer_length;	urb->complete = complete;	urb->context = context;}/** * usb_fill_bulk_urb - macro to help initialize a bulk urb * @urb: pointer to the urb to initialize. * @dev: pointer to the struct usb_device for this urb. * @pipe: the endpoint pipe * @transfer_buffer: pointer to the transfer buffer * @buffer_length: length of the transfer buffer * @complete: pointer to the usb_complete_t function * @context: what to set the urb context to. * * Initializes a bulk urb with the proper information needed to submit it * to a device. */static inline void usb_fill_bulk_urb (struct urb *urb,				      struct usb_device *dev,				      unsigned int pipe,				      void *transfer_buffer,				      int buffer_length,				      usb_complete_t complete,				      void *context)				      {	spin_lock_init(&urb->lock);	urb->dev = dev;	urb->pipe = pipe;	urb->transfer_buffer = transfer_buffer;	urb->transfer_buffer_length = buffer_length;	urb->complete = complete;	urb->context = context;}    /** * usb_fill_int_urb - macro to help initialize a interrupt urb * @urb: pointer to the urb to initialize. * @dev: pointer to the struct usb_device for this urb. * @pipe: the endpoint pipe * @transfer_buffer: pointer to the transfer buffer * @buffer_length: length of the transfer buffer * @complete: pointer to the usb_complete_t function * @context: what to set the urb context to. * @interval: what to set the urb interval to. * * Initializes a interrupt urb with the proper information needed to submit * it to a device. */static inline void usb_fill_int_urb (struct urb *urb,				     struct usb_device *dev,				     unsigned int pipe,				     void *transfer_buffer,				     int buffer_length,				     usb_complete_t complete,				     void *context,				     int interval){	spin_lock_init(&urb->lock);	urb->dev = dev;	urb->pipe = pipe;	urb->transfer_buffer = transfer_buffer;	urb->transfer_buffer_length = buffer_length;	urb->complete = complete;	urb->context = context;	urb->interval = interval;	urb->start_frame = -1;}struct urb *usb_alloc_urb(int iso_packets);void usb_free_urb (struct urb *urb);int usb_submit_urb(struct urb *urb);int usb_unlink_urb(struct urb *urb);int usb_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, struct usb_ctrlrequest *cmd,  void *data, int len, int timeout);int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout);/*-------------------------------------------------------------------* *                         SYNCHRONOUS CALL SUPPORT                  * *-------------------------------------------------------------------*/struct usb_api_data{	wait_queue_head_t wqh;	int done;	/* void* stuff;	*/	/* Possible extension later. */};/* -------------------------------------------------------------------------- */struct usb_operations {	int (*allocate)(struct usb_device *);	int (*deallocate)(struct usb_device *);	int (*get_frame_number) (struct usb_device *usb_dev);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久伊人| 国产精品日日摸夜夜摸av| 日韩亚洲欧美中文三级| 欧美成人午夜电影| 91精品国产免费| 久久青草欧美一区二区三区| 亚洲黄色在线视频| 美女www一区二区| 成人a区在线观看| 日韩欧美的一区| 亚洲精品你懂的| 国内成人免费视频| 精品视频1区2区3区| 欧美国产视频在线| 蜜臀av亚洲一区中文字幕| 97久久超碰国产精品电影| 欧美日韩大陆一区二区| 久久久久国产精品免费免费搜索| 亚洲一区二区三区四区中文字幕| 国产精品77777| 91精品国产欧美一区二区18| 国产精品免费观看视频| 久久精品久久99精品久久| 在线视频欧美区| 国产精品三级在线观看| 狠狠色伊人亚洲综合成人| 欧美日韩一区二区在线观看| 国产精品私人影院| 日韩主播视频在线| 欧美日韩一区三区| 国产日韩精品一区二区三区| 免费精品99久久国产综合精品| 色哟哟一区二区三区| 国产日韩欧美精品在线| 激情久久五月天| 日韩一区二区在线观看视频| 亚洲国产另类av| 色婷婷av一区| 亚洲免费成人av| 91免费版在线看| 国产精品卡一卡二卡三| 成人涩涩免费视频| 国产欧美一区二区三区鸳鸯浴 | 国产亚洲一区字幕| 蜜桃精品视频在线观看| 色爱区综合激月婷婷| 欧美激情一区二区三区蜜桃视频| 国产一区在线观看麻豆| 精品黑人一区二区三区久久 | 在线精品视频免费播放| 国产精品传媒视频| 国产一区二区三区| 日本一区二区三区四区在线视频| 国产精品123| 欧美国产精品中文字幕| bt欧美亚洲午夜电影天堂| 欧美激情一区二区三区不卡 | 国产真实乱偷精品视频免| 精品少妇一区二区三区日产乱码 | 亚洲国产一区在线观看| 在线观看日韩毛片| 中文字幕综合网| 欧美主播一区二区三区| 婷婷综合久久一区二区三区| 91精品欧美综合在线观看最新| 另类人妖一区二区av| 日韩精品最新网址| 国产精品一区二区三区乱码| 国产精品免费久久| 成人激情小说网站| 成人欧美一区二区三区小说| 在线精品观看国产| 久久精品二区亚洲w码| 欧美激情一区二区三区全黄| 99久久国产综合精品色伊| 亚洲最大色网站| 欧美成人video| 99精品视频一区| 图片区日韩欧美亚洲| 欧美一级xxx| 91在线国产观看| 开心九九激情九九欧美日韩精美视频电影| 国产三级精品视频| 精品视频在线免费看| 精品无人码麻豆乱码1区2区| 综合久久综合久久| 欧美一级免费大片| 国产在线国偷精品产拍免费yy| 国产午夜精品久久久久久免费视| 欧美在线啊v一区| 韩国女主播一区| 亚洲影视在线播放| 久久精品欧美一区二区三区不卡| 欧美亚洲综合一区| 国产精品99久久久久| 亚洲成人一二三| 精品久久久网站| 在线一区二区三区四区五区| 国产一区二区三区蝌蚪| 五月婷婷另类国产| 亚洲少妇中出一区| 久久久欧美精品sm网站| 欧美日本精品一区二区三区| 国产一区视频网站| 尤物av一区二区| 国产午夜精品一区二区三区视频| 91精品国产全国免费观看| 91首页免费视频| 韩国毛片一区二区三区| 亚洲午夜久久久久久久久电影网| 国产亚洲成aⅴ人片在线观看| 99re这里都是精品| 蜜桃视频一区二区| 三级在线观看一区二区| 一二三区精品视频| ●精品国产综合乱码久久久久| 欧美刺激脚交jootjob| 欧美日本高清视频在线观看| 99久久国产综合精品色伊| 国产成人精品免费一区二区| 亚洲激情图片一区| 欧美精品一区二区三区高清aⅴ | 色域天天综合网| 北岛玲一区二区三区四区| 国产精品123| 日本aⅴ免费视频一区二区三区| 最新国产の精品合集bt伙计| 日韩女优视频免费观看| 日韩欧美一二三四区| 欧美日韩卡一卡二| 欧美日本一道本| 在线成人免费视频| 91麻豆精品国产91久久久久久久久| 国产精一区二区三区| 秋霞电影一区二区| 久久国产尿小便嘘嘘| 极品美女销魂一区二区三区免费| 蜜臀av一区二区三区| 亚洲午夜激情网站| 日韩国产精品久久| 久久精品国产99| 激情成人综合网| 国产盗摄一区二区| 国产一区二区不卡在线| 91在线观看高清| 欧美三级一区二区| 欧美日韩成人激情| 精品国产凹凸成av人网站| 中文字幕av在线一区二区三区| 中文字幕 久热精品 视频在线| 中文字幕在线不卡| 亚洲一区二区三区爽爽爽爽爽| 午夜激情综合网| 亚洲乱码日产精品bd| 精品一区二区久久| 成人福利视频网站| 欧美性xxxxx极品少妇| 91麻豆精品国产91久久久更新时间| 日韩一区二区三区免费看| 久久精品一区四区| 亚洲主播在线观看| 另类小说视频一区二区| 久久国产精品99久久人人澡| av一二三不卡影片| 欧美一区二区三区人| 欧美xingq一区二区| 亚洲线精品一区二区三区八戒| 久久精品国产精品青草| 高清成人免费视频| 精品视频色一区| 欧美日韩国产一区二区三区地区| 国产校园另类小说区| 午夜欧美电影在线观看| 国产精品中文字幕一区二区三区| 一本大道久久a久久精二百| 欧美性猛片xxxx免费看久爱| 久久久久久久久久久99999| 亚洲综合男人的天堂| 国产精品亚洲一区二区三区妖精| 色av一区二区| 亚洲人成网站精品片在线观看| 久久激情五月激情| 欧美在线小视频| 中文在线免费一区三区高中清不卡| 亚洲国产精品久久人人爱| 国产精品白丝jk白祙喷水网站| 欧美日韩你懂的| 国产欧美一区二区三区鸳鸯浴 | 欧美群妇大交群的观看方式| 国产色一区二区| 美女视频一区二区三区| 成人黄色电影在线| 精品99999| 国产在线播精品第三| 这里是久久伊人| 亚洲综合视频在线观看| 国产精品一区在线观看乱码| www久久精品| 奇米一区二区三区| 欧美日韩精品一区二区在线播放|