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

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

?? usbip_common.h

?? linux virtual usb host source
?? H
字號:
/* * $Id: usbip_common.h 68 2008-04-29 03:31:43Z hirofuchi $ * * Copyright (C) 2003-2008 Takahiro Hirofuchi * * * This 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 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; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */#ifndef  __VHCI_COMMON_H#define  __VHCI_COMMON_H#include <linux/version.h>#include <linux/usb.h>#include <net/sock.h>#include <asm/byteorder.h>/*-------------------------------------------------------------------------*//* * define macros to print messages *//** * udbg - print debug messages if CONFIG_USB_DEBUG is defined * @fmt: * @args: */#ifdef CONFIG_USB_DEBUG#define udbg(fmt, args...)						\	do {								\		printk(KERN_DEBUG "%-10s:(%s,%d) %s: " fmt,		\			(in_interrupt() ? "interrupt" : (current)->comm),\			__FILE__, __LINE__, __FUNCTION__ , ##args);	\	} while(0)#else  /* CONFIG_USB_DEBUG */#define udbg(fmt, args...)		do{ }while(0)#endif /* CONFIG_USB_DEBUG */enum {	usbip_debug_xmit	= (1 << 0),	usbip_debug_sysfs	= (1 << 1),	usbip_debug_urb		= (1 << 2),	usbip_debug_eh		= (1 << 3),	usbip_debug_stub_cmp	= (1 << 8),	usbip_debug_stub_dev	= (1 << 9),	usbip_debug_stub_rx	= (1 << 10),	usbip_debug_stub_tx	= (1 << 11),	usbip_debug_vhci_rh	= (1 << 8),	usbip_debug_vhci_hc	= (1 << 9),	usbip_debug_vhci_rx	= (1 << 10),	usbip_debug_vhci_tx	= (1 << 11),	usbip_debug_vhci_sysfs  = (1 << 12)};#define dbg_flag_xmit		(usbip_debug_flag & usbip_debug_xmit)#define dbg_flag_vhci_rh	(usbip_debug_flag & usbip_debug_vhci_rh)#define dbg_flag_vhci_hc	(usbip_debug_flag & usbip_debug_vhci_hc)#define dbg_flag_vhci_rx	(usbip_debug_flag & usbip_debug_vhci_rx)#define dbg_flag_vhci_tx	(usbip_debug_flag & usbip_debug_vhci_tx)#define dbg_flag_vhci_sysfs	(usbip_debug_flag & usbip_debug_vhci_sysfs)#define dbg_flag_stub_rx	(usbip_debug_flag & usbip_debug_stub_rx)#define dbg_flag_stub_tx	(usbip_debug_flag & usbip_debug_stub_tx)extern unsigned long usbip_debug_flag;extern struct device_attribute dev_attr_usbip_debug;#define dbg_with_flag(flag, fmt, args...)		\	do {						\		if(flag & usbip_debug_flag)		\			udbg(fmt , ##args);		\	} while(0)#define dbg_sysfs(fmt, args...)	dbg_with_flag(usbip_debug_sysfs, fmt , ##args)#define dbg_xmit(fmt, args...)	dbg_with_flag(usbip_debug_xmit,  fmt , ##args)#define dbg_urb(fmt, args...)	dbg_with_flag(usbip_debug_urb,   fmt , ##args)#define dbg_eh(fmt, args...)	dbg_with_flag(usbip_debug_eh,   fmt , ##args)#define dbg_vhci_rh(fmt, args...) dbg_with_flag(usbip_debug_vhci_rh, fmt , ##args)#define dbg_vhci_hc(fmt, args...) dbg_with_flag(usbip_debug_vhci_hc, fmt , ##args)#define dbg_vhci_rx(fmt, args...) dbg_with_flag(usbip_debug_vhci_rx, fmt , ##args)#define dbg_vhci_tx(fmt, args...) dbg_with_flag(usbip_debug_vhci_tx, fmt , ##args)#define dbg_vhci_sysfs(fmt, args...) dbg_with_flag(usbip_debug_vhci_sysfs, fmt , ##args)#define dbg_stub_cmp(fmt, args...) dbg_with_flag(usbip_debug_stub_cmp, fmt , ##args)#define dbg_stub_rx(fmt, args...) dbg_with_flag(usbip_debug_stub_rx, fmt , ##args)#define dbg_stub_tx(fmt, args...) dbg_with_flag(usbip_debug_stub_tx, fmt , ##args)/** * uerr - print error messages * @fmt: * @args: */#define uerr(fmt, args...)						\	do {								\		printk(KERN_ERR "%-10s: ***ERROR*** (%s,%d) %s: " fmt,	\			(in_interrupt() ? "interrupt" : (current)->comm),\			__FILE__, __LINE__, __FUNCTION__ , ##args);	\	} while(0)/** * uinfo - print information messages * @fmt: * @args: */#define uinfo(fmt, args...)					\	do {							\		printk(KERN_INFO "usbip: " fmt , ## args);	\	} while(0)/*-------------------------------------------------------------------------*//* * USB/IP request headers. * Currently, we define 4 request types: * *  - CMD_SUBMIT transfers a USB request, corresponding to usb_submit_urb(). *    (client to server) *  - RET_RETURN transfers the result of CMD_SUBMIT. *    (server to client) *  - CMD_UNLINK transfers an unlink request of a pending USB request. *    (client to server) *  - RET_UNLINK transfers the result of CMD_UNLINK. *    (server to client) * * Note: The below request formats are based on the USB subsystem of Linux. Its * details will be defined when other implementations come. * * *//* * A basic header followed by other additional headers. */struct usbip_header_basic {#define USBIP_CMD_SUBMIT	0x0001#define USBIP_CMD_UNLINK	0x0002#define USBIP_RET_SUBMIT	0x0003#define USBIP_RET_UNLINK	0x0004	__u32 command;	 /* sequencial number which identifies requests.	  * incremented per connections */	__u32 seqnum;	/* devid is used to specify a remote USB device uniquely instead	 * of busnum and devnum in Linux. In the case of Linux stub_driver,	 * this value is ((busnum << 16) | devnum) */	__u32 devid;  #define USBIP_DIR_OUT	0#define USBIP_DIR_IN 	1	__u32 direction;	__u32 ep;     /* endpoint number */} __attribute__ ((packed));/* * An additional header for a CMD_SUBMIT packet. */struct usbip_header_cmd_submit {	/* these values are basically the same as in a URB. */	/* the same in a URB. */	__u32 transfer_flags;	/* set the following data size (out),	 * or expected reading data size (in) */	__s32 transfer_buffer_length;	/* it is difficult for usbip to sync frames (reserved only?) */	__s32 start_frame;	/* the number of iso descriptors that follows this header */	__s32 number_of_packets;	/* the maximum time within which this request works in a host	 * controller of a server side */	__s32 interval;	/* set setup packet data for a CTRL request */	unsigned char setup[8];}__attribute__ ((packed));/* * An additional header for a RET_SUBMIT packet. */struct usbip_header_ret_submit {	__s32 status;	__s32 actual_length; /* returned data length */	__s32 start_frame; /* ISO and INT */	__s32 number_of_packets;  /* ISO only */	__s32 error_count; /* ISO only */}__attribute__ ((packed));/* * An additional header for a CMD_UNLINK packet. */struct usbip_header_cmd_unlink {	__u32 seqnum; /* URB's seqnum which will be unlinked */}__attribute__ ((packed));/* * An additional header for a RET_UNLINK packet. */struct usbip_header_ret_unlink {	__s32 status;}__attribute__ ((packed));/* the same as usb_iso_packet_descriptor but packed for pdu */struct usbip_iso_packet_descriptor {	__u32 offset;	__u32 length;            /* expected length */	__u32 actual_length;	__u32 status;}__attribute__ ((packed));/* * All usbip packets use a common header to keep code simple. */struct usbip_header {	struct usbip_header_basic base;	union {		struct usbip_header_cmd_submit	cmd_submit;		struct usbip_header_ret_submit	ret_submit;		struct usbip_header_cmd_unlink	cmd_unlink;		struct usbip_header_ret_unlink	ret_unlink;	} u;}__attribute__ ((packed));/*-------------------------------------------------------------------------*/int usbip_xmit(int , struct socket *, char *, int , int );int usbip_sendmsg(struct socket *, struct msghdr *, int );static inline int interface_to_busnum(struct usb_interface *interface){	struct usb_device *udev = interface_to_usbdev(interface);	return udev->bus->busnum;}static inline int interface_to_devnum(struct usb_interface *interface){	struct usb_device *udev = interface_to_usbdev(interface);	return udev->devnum;}static inline int interface_to_infnum(struct usb_interface *interface){	return interface->cur_altsetting->desc.bInterfaceNumber;}#if 0int setnodelay(struct socket *);int setquickack(struct socket *);int setkeepalive(struct socket *socket);void setreuse(struct socket *);#endifstruct socket *sockfd_to_socket(unsigned int);int set_sockaddr(struct socket *socket, struct sockaddr_storage *ss);void usbip_dump_urb (struct urb *purb);void usbip_dump_header(struct usbip_header *pdu);struct usbip_device;struct usbip_task {	struct task_struct *thread;	struct completion thread_done;	char *name;	void (*loop_ops)(struct usbip_task *);};enum usbip_side {	USBIP_VHCI,	USBIP_STUB,};enum usbip_status {	/* sdev is available. */	SDEV_ST_AVAILABLE = 0x01,	/* sdev is now used. */	SDEV_ST_USED,	/* sdev is unusable because of a fatal error. */	SDEV_ST_ERROR,	/* vdev does not connect a remote device. */	VDEV_ST_NULL,	/* vdev is used, but the USB address is not assigned yet */	VDEV_ST_NOTASSIGNED,	VDEV_ST_USED,	VDEV_ST_ERROR};/* a common structure for stub_device and vhci_device */struct usbip_device{	enum usbip_side side;	enum usbip_status status;	/* lock for status */	spinlock_t lock;	struct socket *tcp_socket;	struct usbip_task tcp_rx;	struct usbip_task tcp_tx;	/* event handler */#define USBIP_EH_SHUTDOWN	(1 << 0)#define USBIP_EH_BYE		(1 << 1)#define USBIP_EH_RESET		(1 << 2)#define USBIP_EH_UNUSABLE	(1 << 3)#define SDEV_EVENT_REMOVED		( USBIP_EH_SHUTDOWN | USBIP_EH_RESET | USBIP_EH_BYE )#define	SDEV_EVENT_DOWN			( USBIP_EH_SHUTDOWN | USBIP_EH_RESET )#define	SDEV_EVENT_ERROR_TCP		( USBIP_EH_SHUTDOWN | USBIP_EH_RESET )#define	SDEV_EVENT_ERROR_SUBMIT		( USBIP_EH_SHUTDOWN | USBIP_EH_RESET )#define	SDEV_EVENT_ERROR_MALLOC		( USBIP_EH_SHUTDOWN | USBIP_EH_UNUSABLE )#define	VDEV_EVENT_REMOVED		( USBIP_EH_SHUTDOWN | USBIP_EH_BYE )#define	VDEV_EVENT_DOWN			( USBIP_EH_SHUTDOWN | USBIP_EH_RESET )#define	VDEV_EVENT_ERROR_TCP		( USBIP_EH_SHUTDOWN | USBIP_EH_RESET )#define	VDEV_EVENT_ERROR_MALLOC		( USBIP_EH_SHUTDOWN | USBIP_EH_UNUSABLE)	unsigned long event;	struct usbip_task eh;	wait_queue_head_t eh_waitq;	struct eh_ops {		void (*shutdown)(struct usbip_device *);		void (*reset)(struct usbip_device *);		void (*unusable)(struct usbip_device *);	} eh_ops;};void usbip_task_init(struct usbip_task *ut, char *, void (*loop_ops)(struct usbip_task *));void usbip_start_threads(struct usbip_device *ud);void usbip_stop_threads(struct usbip_device *ud);int usbip_thread(void *param);void usbip_pack_pdu(struct usbip_header *pdu, struct urb *urb, int cmd, int pack);void usbip_header_correct_endian(struct usbip_header *pdu, int send);/* some members of urb must be substituted before. */int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb);/* some members of urb must be substituted before. */int usbip_recv_iso(struct usbip_device *ud, struct urb *urb);void *usbip_alloc_iso_desc_pdu(struct urb *urb, ssize_t *bufflen);/* usbip_event.c */void usbip_start_eh(struct usbip_device *ud);void usbip_stop_eh(struct usbip_device *ud);void usbip_event_add(struct usbip_device *ud, unsigned long event);int usbip_event_happend(struct usbip_device *ud);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产成人91porn| 久久精品国产99国产| 伊人开心综合网| 亚洲精选视频在线| 中文字幕在线观看不卡视频| 看片的网站亚洲| 亚洲欧美国产毛片在线| 欧美电影免费提供在线观看| 日本一区二区动态图| 亚洲一卡二卡三卡四卡无卡久久 | 精品欧美一区二区三区精品久久 | 一区二区欧美国产| 日欧美一区二区| 丁香六月综合激情| 一本到高清视频免费精品| 91无套直看片红桃| 制服丝袜亚洲色图| 国产女主播一区| 国产欧美精品一区二区色综合朱莉| 亚洲色图20p| 麻豆91在线播放| 一本色道**综合亚洲精品蜜桃冫| 色偷偷一区二区三区| 欧美高清激情brazzers| 久久夜色精品一区| 久久se这里有精品| 国产福利91精品| 欧美日韩dvd在线观看| 日韩一区在线播放| 激情综合一区二区三区| 51午夜精品国产| 午夜精品国产更新| 99在线精品免费| 国产亚洲精品久| 蜜桃一区二区三区在线| 欧美视频中文字幕| 亚洲乱码国产乱码精品精的特点| 成人avav在线| 亚洲自拍偷拍综合| eeuss鲁片一区二区三区在线看| 国产亚洲欧美色| 国产精品99久久久久久有的能看| 欧美一区日韩一区| 日本女人一区二区三区| 欧美日韩精品电影| 日本视频在线一区| 91麻豆精品国产91久久久久久久久 | 欧美白人最猛性xxxxx69交| 蜜桃视频在线一区| 国产女人18水真多18精品一级做| 国产在线视视频有精品| 国产综合色在线视频区| 国产日韩欧美a| 欧美在线综合视频| 日本欧美一区二区| 国产免费久久精品| 在线观看视频一区二区欧美日韩| 成人黄色电影在线| 国产精品成人免费精品自在线观看| 99这里只有久久精品视频| 亚洲午夜久久久久久久久久久| 制服丝袜av成人在线看| 国产精品一区二区在线看| 亚洲综合丁香婷婷六月香| 欧美成人在线直播| 91一区在线观看| 国产综合色产在线精品| 午夜视频在线观看一区二区| 国产亚洲综合在线| 欧美一区二区三区四区久久| av综合在线播放| 美女被吸乳得到大胸91| 亚洲制服丝袜av| 国产精品毛片高清在线完整版| 这里只有精品免费| 色综合色综合色综合 | 国产主播一区二区三区| 午夜影院久久久| 欧美经典三级视频一区二区三区| 精品视频999| 欧美视频在线播放| 成人精品视频网站| 国产不卡高清在线观看视频| 国内成人免费视频| 日韩国产高清影视| 亚洲国产综合色| 图片区小说区国产精品视频| 香港成人在线视频| 国产乱码精品一区二区三区av| 午夜激情综合网| 亚洲r级在线视频| 五月婷婷欧美视频| 亚洲午夜久久久久久久久久久| 亚洲欧美另类综合偷拍| 一区二区三区日本| 婷婷国产在线综合| 美女尤物国产一区| 狠狠色伊人亚洲综合成人| 激情小说欧美图片| 国产美女精品一区二区三区| 国产在线精品不卡| 国产成人午夜精品5599 | 粉嫩高潮美女一区二区三区| 国产91高潮流白浆在线麻豆| 不卡影院免费观看| 在线观看91视频| 日韩你懂的电影在线观看| 久久久精品黄色| 日韩美女精品在线| 秋霞成人午夜伦在线观看| 国产在线视频一区二区三区| 日本高清免费不卡视频| 日韩一区二区影院| 国产精品久久久久永久免费观看| 亚洲午夜久久久久久久久电影网 | 国产91精品欧美| 欧美日本乱大交xxxxx| 国产校园另类小说区| 亚洲高清中文字幕| 国产69精品久久99不卡| 欧美精品v日韩精品v韩国精品v| 久久久噜噜噜久久中文字幕色伊伊| 国产精品国产馆在线真实露脸| 国产亚洲精品精华液| 亚洲私人黄色宅男| 国产一区二区三区免费播放| 色一区在线观看| 久久久精品免费观看| 另类成人小视频在线| 在线亚洲人成电影网站色www| 亚洲一区二区三区小说| 国产一区二区导航在线播放| 欧美日韩精品电影| 亚洲色图视频网| 成人久久久精品乱码一区二区三区 | 欧美精品九九99久久| 亚洲欧美日韩系列| 成人综合激情网| 久久久久久久免费视频了| 奇米精品一区二区三区在线观看一| 91免费版在线看| 国产精品麻豆久久久| 国产高清精品网站| 久久―日本道色综合久久| 麻豆精品国产91久久久久久| 91麻豆精品国产综合久久久久久| 亚洲网友自拍偷拍| 欧美四级电影网| 天堂精品中文字幕在线| 欧美乱妇23p| 免费久久精品视频| www国产成人免费观看视频 深夜成人网| 蜜臀av一区二区三区| 精品三级av在线| 国产经典欧美精品| 日本一区二区久久| 91农村精品一区二区在线| 亚洲欧美日韩国产一区二区三区| 色一情一伦一子一伦一区| 亚洲在线成人精品| 制服丝袜亚洲色图| 国产在线观看一区二区| 国产精品精品国产色婷婷| 色一区在线观看| 美腿丝袜亚洲三区| 国产精品久久福利| 欧美视频一区在线观看| 久久99精品久久久久久久久久久久| 国产午夜三级一区二区三| 99久久婷婷国产精品综合| 三级一区在线视频先锋 | 色婷婷精品久久二区二区蜜臀av| 亚洲亚洲精品在线观看| 日韩一级二级三级| 不卡av免费在线观看| 日韩成人dvd| 亚洲丝袜制服诱惑| 精品美女在线观看| 欧美性感一区二区三区| 国产精品小仙女| 久久成人免费网站| 一区二区三区蜜桃| 久久视频一区二区| 欧美日韩国产美| 色呦呦日韩精品| 成人美女视频在线观看18| 久久精品二区亚洲w码| 亚洲主播在线播放| 亚洲欧洲www| 久久久久久综合| 精品国产网站在线观看| 欧美日韩中文一区| 91蜜桃视频在线| av日韩在线网站| 成人黄色网址在线观看| 国产黑丝在线一区二区三区| 久久国产日韩欧美精品| 久久精品国产99| 麻豆视频一区二区| 黄色精品一二区|