Path: blob/master/tools/usb/usbip/libsrc/usbip_common.h
26292 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Copyright (C) 2005-2007 Takahiro Hirofuchi3*/45#ifndef __USBIP_COMMON_H6#define __USBIP_COMMON_H78#include <libudev.h>910#include <stdint.h>11#include <stdio.h>12#include <stdlib.h>13#include <string.h>1415#include <syslog.h>16#include <unistd.h>17#include <linux/usb/ch9.h>18#include <linux/usbip.h>1920#ifndef USBIDS_FILE21#define USBIDS_FILE "/usr/share/hwdata/usb.ids"22#endif2324#ifndef VHCI_STATE_PATH25#define VHCI_STATE_PATH "/var/run/vhci_hcd"26#endif2728#define VUDC_DEVICE_DESCR_FILE "dev_desc"2930/* kernel module names */31#define USBIP_CORE_MOD_NAME "usbip-core"32#define USBIP_HOST_DRV_NAME "usbip-host"33#define USBIP_DEVICE_DRV_NAME "usbip-vudc"34#define USBIP_VHCI_DRV_NAME "vhci_hcd"3536/* sysfs constants */37#define SYSFS_MNT_PATH "/sys"38#define SYSFS_BUS_NAME "bus"39#define SYSFS_BUS_TYPE "usb"40#define SYSFS_DRIVERS_NAME "drivers"4142#define SYSFS_PATH_MAX 25643#define SYSFS_BUS_ID_SIZE 324445/* Defines for op_code status in server/client op_common PDUs */46#define ST_OK 0x0047#define ST_NA 0x0148/* Device requested for import is not available */49#define ST_DEV_BUSY 0x0250/* Device requested for import is in error state */51#define ST_DEV_ERR 0x0352#define ST_NODEV 0x0453#define ST_ERROR 0x055455extern int usbip_use_syslog;56extern int usbip_use_stderr;57extern int usbip_use_debug ;5859#define PROGNAME "usbip"6061#define pr_fmt(fmt) "%s: %s: " fmt "\n", PROGNAME62#define dbg_fmt(fmt) pr_fmt("%s:%d:[%s] " fmt), "debug", \63__FILE__, __LINE__, __func__6465#define err(fmt, args...) \66do { \67if (usbip_use_syslog) { \68syslog(LOG_ERR, pr_fmt(fmt), "error", ##args); \69} \70if (usbip_use_stderr) { \71fprintf(stderr, pr_fmt(fmt), "error", ##args); \72} \73} while (0)7475#define info(fmt, args...) \76do { \77if (usbip_use_syslog) { \78syslog(LOG_INFO, pr_fmt(fmt), "info", ##args); \79} \80if (usbip_use_stderr) { \81fprintf(stderr, pr_fmt(fmt), "info", ##args); \82} \83} while (0)8485#define dbg(fmt, args...) \86do { \87if (usbip_use_debug) { \88if (usbip_use_syslog) { \89syslog(LOG_DEBUG, dbg_fmt(fmt), ##args); \90} \91if (usbip_use_stderr) { \92fprintf(stderr, dbg_fmt(fmt), ##args); \93} \94} \95} while (0)9697#define BUG() \98do { \99err("sorry, it's a bug!"); \100abort(); \101} while (0)102103struct usbip_usb_interface {104uint8_t bInterfaceClass;105uint8_t bInterfaceSubClass;106uint8_t bInterfaceProtocol;107uint8_t padding; /* alignment */108} __attribute__((packed));109110struct usbip_usb_device {111char path[SYSFS_PATH_MAX];112char busid[SYSFS_BUS_ID_SIZE];113114uint32_t busnum;115uint32_t devnum;116uint32_t speed;117118uint16_t idVendor;119uint16_t idProduct;120uint16_t bcdDevice;121122uint8_t bDeviceClass;123uint8_t bDeviceSubClass;124uint8_t bDeviceProtocol;125uint8_t bConfigurationValue;126uint8_t bNumConfigurations;127uint8_t bNumInterfaces;128} __attribute__((packed));129130#define to_string(s) #s131132void dump_usb_interface(struct usbip_usb_interface *);133void dump_usb_device(struct usbip_usb_device *);134int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev);135int read_attr_value(struct udev_device *dev, const char *name,136const char *format);137int read_usb_interface(struct usbip_usb_device *udev, int i,138struct usbip_usb_interface *uinf);139140const char *usbip_speed_string(int num);141const char *usbip_status_string(int32_t status);142const char *usbip_op_common_status_string(int status);143144int usbip_names_init(char *);145void usbip_names_free(void);146void usbip_names_get_product(char *buff, size_t size, uint16_t vendor,147uint16_t product);148void usbip_names_get_class(char *buff, size_t size, uint8_t class,149uint8_t subclass, uint8_t protocol);150151#endif /* __USBIP_COMMON_H */152153154