610a7d6478
I am able to at least probe some devices, and this gets us a large number of extra packages.
192 lines
5.5 KiB
C
192 lines
5.5 KiB
C
/*
|
|
* CDDL HEADER START
|
|
*
|
|
* The contents of this file are subject to the terms of the
|
|
* Common Development and Distribution License (the "License").
|
|
* You may not use this file except in compliance with the License.
|
|
*
|
|
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
|
* or http://www.opensolaris.org/os/licensing.
|
|
* See the License for the specific language governing permissions
|
|
* and limitations under the License.
|
|
*
|
|
* When distributing Covered Code, include this CDDL HEADER in each
|
|
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
|
* If applicable, add the following below this CDDL HEADER, with the
|
|
* fields enclosed by brackets "[]" replaced with your own identifying
|
|
* information: Portions Copyright [yyyy] [name of copyright owner]
|
|
*
|
|
* CDDL HEADER END
|
|
*/
|
|
/*
|
|
* Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
|
|
*/
|
|
|
|
#ifndef _SYS_USB_LIBUSB_LIBUSB_IMPL_H
|
|
#define _SYS_USB_LIBUSB_LIBUSB_IMPL_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* debug levels */
|
|
#define DEBUG_NONE 0
|
|
#define DEBUG_ERRORS 1
|
|
#define DEBUG_RECOVERABLE 2
|
|
#define DEBUG_FUNCTIONS 3
|
|
#define DEBUG_DETAILED 4
|
|
#define DEBUG_DATA_DUMP 5
|
|
|
|
/* api binding */
|
|
#define API_RELAXED 0
|
|
#define API_STRICT 1
|
|
|
|
/*
|
|
* XXX issues: remove duplicates with usb.h
|
|
*/
|
|
typedef struct usb_device usb_device_t;
|
|
typedef struct usb_bus usb_bus_t;
|
|
typedef struct usb_ctrl_setup usb_ctrl_setup_t;
|
|
|
|
/* some useful defines */
|
|
#define USB_DEV_REQ_HOST_TO_DEV 0x00
|
|
#define USB_DEV_REQ_DEV_TO_HOST 0x80
|
|
#define USB_DEV_REQ_DIR_MASK 0x80
|
|
|
|
#define USB_DESCR_TYPE_SETUP_DEV 0x0100
|
|
#define USB_DESCR_TYPE_SETUP_CFG 0x0200
|
|
#define USB_DESCR_TYPE_SETUP_STRING 0x0300
|
|
#define USB_DESCR_TYPE_SETUP_IF 0x0400
|
|
#define USB_DESCR_TYPE_SETUP_EP 0x0500
|
|
#define USB_DESCR_TYPE_SETUP_DEV_QLF 0x0600
|
|
#define USB_DESCR_TYPE_SETUP_OTHER_SPEED_CFG 0x0700
|
|
#define USB_DESCR_TYPE_SETUP_IFPWR 0x0800
|
|
|
|
#define USB_DESCR_TYPE_DEV 0x01
|
|
#define USB_DESCR_TYPE_CFG 0x02
|
|
#define USB_DESCR_TYPE_STRING 0x03
|
|
#define USB_DESCR_TYPE_IF 0x04
|
|
#define USB_DESCR_TYPE_EP 0x05
|
|
#define USB_DESCR_TYPE_DEV_QLF 0x06
|
|
#define USB_DESCR_TYPE_OTHER_SPEED_CFG 0x07
|
|
#define USB_DESCR_TYPE_IF_PWR 0x08
|
|
|
|
/*
|
|
* bEndpointAddress masks
|
|
*/
|
|
#define USB_EP_NUM_MASK 0x0F /* endpoint number mask */
|
|
#define USB_EP_DIR_MASK 0x80 /* direction mask */
|
|
#define USB_EP_DIR_OUT 0x00 /* OUT endpoint */
|
|
#define USB_EP_DIR_IN 0x80 /* IN endpoint */
|
|
|
|
/*
|
|
* The compiler pads the above structures; the following represent the
|
|
* unpadded, aggregate data sizes.
|
|
*/
|
|
#define USB_DEV_DESCR_SIZE 18 /* device descr size */
|
|
#define USB_CFG_DESCR_SIZE 9 /* configuration desc. size */
|
|
#define USBA_CFG_PWR_DESCR_SIZE 18 /* configuration pwr desc. size */
|
|
#define USB_IF_DESCR_SIZE 9 /* interface descr size */
|
|
#define USBA_IF_PWR_DESCR_SIZE 15 /* interface pwr descr size */
|
|
#define USB_EP_DESCR_SIZE 7 /* endpoint descr size */
|
|
|
|
#define BYTE_SWAP(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
|
|
|
|
/* I/O direction */
|
|
#define READ 0
|
|
#define WRITE 1
|
|
|
|
typedef enum {
|
|
USB_ERROR_TYPE_NONE = 0,
|
|
USB_ERROR_TYPE_STRING,
|
|
USB_ERROR_TYPE_ERRNO
|
|
} usb_error_type_t;
|
|
|
|
/*
|
|
* This records the file descriptors for endpoint/status devices.
|
|
*/
|
|
typedef struct usb_dev_handle_info {
|
|
int configuration_value;
|
|
int configuration_index;
|
|
int claimed_interface;
|
|
int alternate;
|
|
int ep_fd[USB_MAXENDPOINTS];
|
|
int ep_status_fd[USB_MAXENDPOINTS];
|
|
int ep_interface[USB_MAXENDPOINTS];
|
|
} usb_dev_handle_info_t;
|
|
|
|
typedef struct {
|
|
usb_device_t *device;
|
|
usb_dev_handle_info_t *info;
|
|
} usb_dev_handle_impl_t;
|
|
|
|
#define USB_MAX_INTERFACES 256
|
|
|
|
typedef struct {
|
|
int ref_count;
|
|
int ep0_fd;
|
|
int ep0_fd_stat;
|
|
usb_dev_handle_impl_t
|
|
*claimed_interfaces[USB_MAX_INTERFACES];
|
|
} usb_device_specific_t;
|
|
|
|
#define USB_PARSE_ERROR 0
|
|
#define USB_DESCR_TYPE_ANY -1 /* Wild card */
|
|
|
|
#define INCREMENT_BUF(buf) \
|
|
if ((buf)[0] == 0) { \
|
|
break; \
|
|
} else { \
|
|
(buf) += (buf)[0]; \
|
|
}
|
|
#define isdigit(ch) ((ch >= '0') && (ch <= '9'))
|
|
|
|
typedef struct usb_cfg_descr {
|
|
uint8_t bLength; /* descriptor size */
|
|
uint8_t bDescriptorType; /* set to CONFIGURATION */
|
|
uint16_t wTotalLength; /* total length of data returned */
|
|
uint8_t bNumInterfaces; /* # interfaces in config */
|
|
uint8_t bConfigurationValue; /* arg for SetConfiguration */
|
|
uint8_t iConfiguration; /* configuration string */
|
|
uint8_t bmAttributes; /* config characteristics */
|
|
uint8_t MaxPower; /* max pwr consumption */
|
|
} usb_cfg_descr_t;
|
|
|
|
|
|
/*
|
|
* usb_if_descr:
|
|
* usb interface descriptor, refer to USB 2.0/9.6.5
|
|
*/
|
|
typedef struct usb_if_descr {
|
|
uint8_t bLength; /* descriptor size */
|
|
uint8_t bDescriptorType; /* set to INTERFACE */
|
|
uint8_t bInterfaceNumber; /* interface number */
|
|
uint8_t bAlternateSetting; /* alt. interface number */
|
|
uint8_t bNumEndpoints; /* # of endpoints */
|
|
uint8_t bInterfaceClass; /* class code */
|
|
uint8_t bInterfaceSubClass; /* sub class code */
|
|
uint8_t bInterfaceProtocol; /* protocol code */
|
|
uint8_t iInterface; /* description string */
|
|
} usb_if_descr_t;
|
|
|
|
|
|
/*
|
|
* usb_ep_descr:
|
|
* usb endpoint descriptor, refer to USB 2.0/9.6.6
|
|
*/
|
|
typedef struct usb_ep_descr {
|
|
uint8_t bLength; /* descriptor size */
|
|
uint8_t bDescriptorType; /* set to ENDPOINT */
|
|
uint8_t bEndpointAddress; /* address of this e/p */
|
|
uint8_t bmAttributes; /* transfer type */
|
|
uint16_t wMaxPacketSize; /* maximum packet size */
|
|
uint8_t bInterval; /* e/p polling interval */
|
|
uint8_t bRefresh; /* refresh */
|
|
uint8_t bSynchAddress;
|
|
} usb_ep_descr_t;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _SYS_USB_LIBUSB_LIBUSB_IMPL_H */
|