xref: /linux/tools/usb/usbip/libsrc/usbip_common.h (revision c13aca79ff3c4af5fd31a5b2743a90eba6e36a26)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2588b48caSValentina Manea /*
3588b48caSValentina Manea  * Copyright (C) 2005-2007 Takahiro Hirofuchi
4588b48caSValentina Manea  */
5588b48caSValentina Manea 
6588b48caSValentina Manea #ifndef __USBIP_COMMON_H
7588b48caSValentina Manea #define __USBIP_COMMON_H
8588b48caSValentina Manea 
9588b48caSValentina Manea #include <libudev.h>
10588b48caSValentina Manea 
11588b48caSValentina Manea #include <stdint.h>
12588b48caSValentina Manea #include <stdio.h>
13588b48caSValentina Manea #include <stdlib.h>
14588b48caSValentina Manea #include <string.h>
15588b48caSValentina Manea 
16588b48caSValentina Manea #include <syslog.h>
17588b48caSValentina Manea #include <unistd.h>
18588b48caSValentina Manea #include <linux/usb/ch9.h>
196fa9e1beSPiotr Król #include <linux/usbip.h>
20588b48caSValentina Manea 
21588b48caSValentina Manea #ifndef USBIDS_FILE
22588b48caSValentina Manea #define USBIDS_FILE "/usr/share/hwdata/usb.ids"
23588b48caSValentina Manea #endif
24588b48caSValentina Manea 
25588b48caSValentina Manea #ifndef VHCI_STATE_PATH
26588b48caSValentina Manea #define VHCI_STATE_PATH "/var/run/vhci_hcd"
27588b48caSValentina Manea #endif
28588b48caSValentina Manea 
297b3f74f7SKrzysztof Opasiak #define VUDC_DEVICE_DESCR_FILE "dev_desc"
307b3f74f7SKrzysztof Opasiak 
31588b48caSValentina Manea /* kernel module names */
32588b48caSValentina Manea #define USBIP_CORE_MOD_NAME	"usbip-core"
33588b48caSValentina Manea #define USBIP_HOST_DRV_NAME	"usbip-host"
347b3f74f7SKrzysztof Opasiak #define USBIP_DEVICE_DRV_NAME	"usbip-vudc"
35588b48caSValentina Manea #define USBIP_VHCI_DRV_NAME	"vhci_hcd"
36588b48caSValentina Manea 
37588b48caSValentina Manea /* sysfs constants */
38588b48caSValentina Manea #define SYSFS_MNT_PATH         "/sys"
39588b48caSValentina Manea #define SYSFS_BUS_NAME         "bus"
40588b48caSValentina Manea #define SYSFS_BUS_TYPE         "usb"
41588b48caSValentina Manea #define SYSFS_DRIVERS_NAME     "drivers"
42588b48caSValentina Manea 
43588b48caSValentina Manea #define SYSFS_PATH_MAX		256
44588b48caSValentina Manea #define SYSFS_BUS_ID_SIZE	32
45588b48caSValentina Manea 
46*f6bcbf2eSShuah Khan /* Defines for op_code status in server/client op_common PDUs */
47*f6bcbf2eSShuah Khan #define ST_OK	0x00
48*f6bcbf2eSShuah Khan #define ST_NA	0x01
49*f6bcbf2eSShuah Khan 	/* Device requested for import is not available */
50*f6bcbf2eSShuah Khan #define ST_DEV_BUSY	0x02
51*f6bcbf2eSShuah Khan 	/* Device requested for import is in error state */
52*f6bcbf2eSShuah Khan #define ST_DEV_ERR	0x03
53*f6bcbf2eSShuah Khan #define ST_NODEV	0x04
54*f6bcbf2eSShuah Khan #define ST_ERROR	0x05
55*f6bcbf2eSShuah Khan 
56588b48caSValentina Manea extern int usbip_use_syslog;
57588b48caSValentina Manea extern int usbip_use_stderr;
58588b48caSValentina Manea extern int usbip_use_debug ;
59588b48caSValentina Manea 
60588b48caSValentina Manea #define PROGNAME "usbip"
61588b48caSValentina Manea 
62588b48caSValentina Manea #define pr_fmt(fmt)	"%s: %s: " fmt "\n", PROGNAME
63588b48caSValentina Manea #define dbg_fmt(fmt)	pr_fmt("%s:%d:[%s] " fmt), "debug",	\
64588b48caSValentina Manea 		        __FILE__, __LINE__, __func__
65588b48caSValentina Manea 
66588b48caSValentina Manea #define err(fmt, args...)						\
67588b48caSValentina Manea 	do {								\
68588b48caSValentina Manea 		if (usbip_use_syslog) {					\
69588b48caSValentina Manea 			syslog(LOG_ERR, pr_fmt(fmt), "error", ##args);	\
70588b48caSValentina Manea 		}							\
71588b48caSValentina Manea 		if (usbip_use_stderr) {					\
72588b48caSValentina Manea 			fprintf(stderr, pr_fmt(fmt), "error", ##args);	\
73588b48caSValentina Manea 		}							\
74588b48caSValentina Manea 	} while (0)
75588b48caSValentina Manea 
76588b48caSValentina Manea #define info(fmt, args...)						\
77588b48caSValentina Manea 	do {								\
78588b48caSValentina Manea 		if (usbip_use_syslog) {					\
79588b48caSValentina Manea 			syslog(LOG_INFO, pr_fmt(fmt), "info", ##args);	\
80588b48caSValentina Manea 		}							\
81588b48caSValentina Manea 		if (usbip_use_stderr) {					\
82588b48caSValentina Manea 			fprintf(stderr, pr_fmt(fmt), "info", ##args);	\
83588b48caSValentina Manea 		}							\
84588b48caSValentina Manea 	} while (0)
85588b48caSValentina Manea 
86588b48caSValentina Manea #define dbg(fmt, args...)						\
87588b48caSValentina Manea 	do {								\
88588b48caSValentina Manea 	if (usbip_use_debug) {						\
89588b48caSValentina Manea 		if (usbip_use_syslog) {					\
90588b48caSValentina Manea 			syslog(LOG_DEBUG, dbg_fmt(fmt), ##args);	\
91588b48caSValentina Manea 		}							\
92588b48caSValentina Manea 		if (usbip_use_stderr) {					\
93588b48caSValentina Manea 			fprintf(stderr, dbg_fmt(fmt), ##args);		\
94588b48caSValentina Manea 		}							\
95588b48caSValentina Manea 	}								\
96588b48caSValentina Manea 	} while (0)
97588b48caSValentina Manea 
98588b48caSValentina Manea #define BUG()						\
99588b48caSValentina Manea 	do {						\
100588b48caSValentina Manea 		err("sorry, it's a bug!");		\
101588b48caSValentina Manea 		abort();				\
102588b48caSValentina Manea 	} while (0)
103588b48caSValentina Manea 
104588b48caSValentina Manea struct usbip_usb_interface {
105588b48caSValentina Manea 	uint8_t bInterfaceClass;
106588b48caSValentina Manea 	uint8_t bInterfaceSubClass;
107588b48caSValentina Manea 	uint8_t bInterfaceProtocol;
108588b48caSValentina Manea 	uint8_t padding;	/* alignment */
109588b48caSValentina Manea } __attribute__((packed));
110588b48caSValentina Manea 
111588b48caSValentina Manea struct usbip_usb_device {
112588b48caSValentina Manea 	char path[SYSFS_PATH_MAX];
113588b48caSValentina Manea 	char busid[SYSFS_BUS_ID_SIZE];
114588b48caSValentina Manea 
115588b48caSValentina Manea 	uint32_t busnum;
116588b48caSValentina Manea 	uint32_t devnum;
117588b48caSValentina Manea 	uint32_t speed;
118588b48caSValentina Manea 
119588b48caSValentina Manea 	uint16_t idVendor;
120588b48caSValentina Manea 	uint16_t idProduct;
121588b48caSValentina Manea 	uint16_t bcdDevice;
122588b48caSValentina Manea 
123588b48caSValentina Manea 	uint8_t bDeviceClass;
124588b48caSValentina Manea 	uint8_t bDeviceSubClass;
125588b48caSValentina Manea 	uint8_t bDeviceProtocol;
126588b48caSValentina Manea 	uint8_t bConfigurationValue;
127588b48caSValentina Manea 	uint8_t bNumConfigurations;
128588b48caSValentina Manea 	uint8_t bNumInterfaces;
129588b48caSValentina Manea } __attribute__((packed));
130588b48caSValentina Manea 
131588b48caSValentina Manea #define to_string(s)	#s
132588b48caSValentina Manea 
133588b48caSValentina Manea void dump_usb_interface(struct usbip_usb_interface *);
134588b48caSValentina Manea void dump_usb_device(struct usbip_usb_device *);
135588b48caSValentina Manea int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev);
136588b48caSValentina Manea int read_attr_value(struct udev_device *dev, const char *name,
137588b48caSValentina Manea 		    const char *format);
138588b48caSValentina Manea int read_usb_interface(struct usbip_usb_device *udev, int i,
139588b48caSValentina Manea 		       struct usbip_usb_interface *uinf);
140588b48caSValentina Manea 
141588b48caSValentina Manea const char *usbip_speed_string(int num);
142588b48caSValentina Manea const char *usbip_status_string(int32_t status);
143*f6bcbf2eSShuah Khan const char *usbip_op_common_status_string(int status);
144588b48caSValentina Manea 
145588b48caSValentina Manea int usbip_names_init(char *);
146588b48caSValentina Manea void usbip_names_free(void);
147588b48caSValentina Manea void usbip_names_get_product(char *buff, size_t size, uint16_t vendor,
148588b48caSValentina Manea 			     uint16_t product);
149588b48caSValentina Manea void usbip_names_get_class(char *buff, size_t size, uint8_t class,
150588b48caSValentina Manea 			   uint8_t subclass, uint8_t protocol);
151588b48caSValentina Manea 
152588b48caSValentina Manea #endif /* __USBIP_COMMON_H */
153