linux/tools/usb/usbip/libsrc/usbip_common.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2005-2007 Takahiro Hirofuchi
   3 */
   4
   5#ifndef __USBIP_COMMON_H
   6#define __USBIP_COMMON_H
   7
   8#include <libudev.h>
   9
  10#include <stdint.h>
  11#include <stdio.h>
  12#include <stdlib.h>
  13#include <string.h>
  14
  15#include <syslog.h>
  16#include <unistd.h>
  17#include <linux/usb/ch9.h>
  18#include <linux/usbip.h>
  19
  20#ifndef USBIDS_FILE
  21#define USBIDS_FILE "/usr/share/hwdata/usb.ids"
  22#endif
  23
  24#ifndef VHCI_STATE_PATH
  25#define VHCI_STATE_PATH "/var/run/vhci_hcd"
  26#endif
  27
  28#define VUDC_DEVICE_DESCR_FILE "dev_desc"
  29
  30/* 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"
  35
  36/* 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"
  41
  42#define SYSFS_PATH_MAX          256
  43#define SYSFS_BUS_ID_SIZE       32
  44
  45extern int usbip_use_syslog;
  46extern int usbip_use_stderr;
  47extern int usbip_use_debug ;
  48
  49#define PROGNAME "usbip"
  50
  51#define pr_fmt(fmt)     "%s: %s: " fmt "\n", PROGNAME
  52#define dbg_fmt(fmt)    pr_fmt("%s:%d:[%s] " fmt), "debug",     \
  53                        __FILE__, __LINE__, __func__
  54
  55#define err(fmt, args...)                                               \
  56        do {                                                            \
  57                if (usbip_use_syslog) {                                 \
  58                        syslog(LOG_ERR, pr_fmt(fmt), "error", ##args);  \
  59                }                                                       \
  60                if (usbip_use_stderr) {                                 \
  61                        fprintf(stderr, pr_fmt(fmt), "error", ##args);  \
  62                }                                                       \
  63        } while (0)
  64
  65#define info(fmt, args...)                                              \
  66        do {                                                            \
  67                if (usbip_use_syslog) {                                 \
  68                        syslog(LOG_INFO, pr_fmt(fmt), "info", ##args);  \
  69                }                                                       \
  70                if (usbip_use_stderr) {                                 \
  71                        fprintf(stderr, pr_fmt(fmt), "info", ##args);   \
  72                }                                                       \
  73        } while (0)
  74
  75#define dbg(fmt, args...)                                               \
  76        do {                                                            \
  77        if (usbip_use_debug) {                                          \
  78                if (usbip_use_syslog) {                                 \
  79                        syslog(LOG_DEBUG, dbg_fmt(fmt), ##args);        \
  80                }                                                       \
  81                if (usbip_use_stderr) {                                 \
  82                        fprintf(stderr, dbg_fmt(fmt), ##args);          \
  83                }                                                       \
  84        }                                                               \
  85        } while (0)
  86
  87#define BUG()                                           \
  88        do {                                            \
  89                err("sorry, it's a bug!");              \
  90                abort();                                \
  91        } while (0)
  92
  93struct usbip_usb_interface {
  94        uint8_t bInterfaceClass;
  95        uint8_t bInterfaceSubClass;
  96        uint8_t bInterfaceProtocol;
  97        uint8_t padding;        /* alignment */
  98} __attribute__((packed));
  99
 100struct usbip_usb_device {
 101        char path[SYSFS_PATH_MAX];
 102        char busid[SYSFS_BUS_ID_SIZE];
 103
 104        uint32_t busnum;
 105        uint32_t devnum;
 106        uint32_t speed;
 107
 108        uint16_t idVendor;
 109        uint16_t idProduct;
 110        uint16_t bcdDevice;
 111
 112        uint8_t bDeviceClass;
 113        uint8_t bDeviceSubClass;
 114        uint8_t bDeviceProtocol;
 115        uint8_t bConfigurationValue;
 116        uint8_t bNumConfigurations;
 117        uint8_t bNumInterfaces;
 118} __attribute__((packed));
 119
 120#define to_string(s)    #s
 121
 122void dump_usb_interface(struct usbip_usb_interface *);
 123void dump_usb_device(struct usbip_usb_device *);
 124int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev);
 125int read_attr_value(struct udev_device *dev, const char *name,
 126                    const char *format);
 127int read_usb_interface(struct usbip_usb_device *udev, int i,
 128                       struct usbip_usb_interface *uinf);
 129
 130const char *usbip_speed_string(int num);
 131const char *usbip_status_string(int32_t status);
 132
 133int usbip_names_init(char *);
 134void usbip_names_free(void);
 135void usbip_names_get_product(char *buff, size_t size, uint16_t vendor,
 136                             uint16_t product);
 137void usbip_names_get_class(char *buff, size_t size, uint8_t class,
 138                           uint8_t subclass, uint8_t protocol);
 139
 140#endif /* __USBIP_COMMON_H */
 141