
/*
 * drivers/usb/gadget/aml_tiny_usbtool/usb_ch9.h
 *
 * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
 *
 * This program 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 program 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.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

#ifndef __LINUX_USB_CH9_H
#define __LINUX_USB_CH9_H

/**
 * @file usb_ch9.h
 * @brief This file holds USB constants and structures that are needed for USB
 * device APIs.  These are used by the USB device model, which is defined
 * in chapter 9 of the USB 2.0 specification.  Linux has several APIs in C
 * that need these:
 *
 * - the master/host side Linux-USB kernel driver API;
 * - the "usbfs" user space API; and
 * - the Linux "gadget" slave/device/peripheral side driver API.
 *
 * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems
 * act either as a USB master/host or as a USB slave/device.  That means
 * the master and slave side APIs benefit from working well together.
 *
 * There's also "Wireless USB", using low power short range radios for
 * peripheral interconnection but otherwise building on the USB framework.
 *
 * @addtogroup usb_core
 */
/*@{*/

#include <linux/types.h>

/*******************************************************
* CONTROL REQUEST SUPPORT
********************************************************/

/// USB directions, to device
/// This bit flag is used in endpoint descriptors' bEndpointAddress field.
/// It's also one of three fields in control requests bRequestType.
#define USB_DIR_OUT     0
/// USB directions, to host
/// This bit flag is used in endpoint descriptors' bEndpointAddress field.
/// It's also one of three fields in control requests bRequestType.
#define USB_DIR_IN      0x80

/// USB types, the second of three bRequestType fields
#define USB_TYPE_MASK       (0x03 << 5)
/// USB types, the second of three bRequestType fields
#define USB_TYPE_STANDARD   (0x00 << 5)
/// USB types, the second of three bRequestType fields
#define USB_TYPE_CLASS      (0x01 << 5)
/// USB types, the second of three bRequestType fields
#define USB_TYPE_VENDOR     (0x02 << 5)
/// USB types, the second of three bRequestType fields
#define USB_TYPE_RESERVED   (0x03 << 5)

/// USB recipients, the third of three bRequestType fields
#define USB_RECIP_MASK        0x1f
/// USB recipients, the third of three bRequestType fields
#define USB_RECIP_DEVICE      0x00
/// USB recipients, the third of three bRequestType fields
#define USB_RECIP_INTERFACE   0x01
/// USB recipients, the third of three bRequestType fields
#define USB_RECIP_ENDPOINT    0x02
/// USB recipients, the third of three bRequestType fields
#define USB_RECIP_OTHER       0x03

/*
 * Standard requests, for the bRequest field of a SETUP packet.
 *
 * These are qualified by the bRequestType field, so that for example
 * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved
 * by a GET_STATUS request.
 */
#define USB_REQ_GET_STATUS    0x00
#define USB_REQ_CLEAR_FEATURE   0x01
#define USB_REQ_SET_FEATURE   0x03
#define USB_REQ_SET_ADDRESS   0x05
#define USB_REQ_GET_DESCRIPTOR    0x06
#define USB_REQ_SET_DESCRIPTOR    0x07
#define USB_REQ_GET_CONFIGURATION 0x08
#define USB_REQ_SET_CONFIGURATION 0x09
#define USB_REQ_GET_INTERFACE   0x0A
#define USB_REQ_SET_INTERFACE   0x0B
#define USB_REQ_SYNCH_FRAME   0x0C

/// Wireless USB
#define USB_REQ_SET_ENCRYPTION    0x0D/

#define USB_REQ_GET_ENCRYPTION    0x0E
#define USB_REQ_SET_HANDSHAKE   0x0F
#define USB_REQ_GET_HANDSHAKE   0x10
#define USB_REQ_SET_CONNECTION    0x11
#define USB_REQ_SET_SECURITY_DATA 0x12
#define USB_REQ_GET_SECURITY_DATA 0x13
#define USB_REQ_SET_WUSB_DATA   0x14
#define USB_REQ_LOOPBACK_DATA_WRITE 0x15
#define USB_REQ_LOOPBACK_DATA_READ  0x16
#define USB_REQ_SET_INTERFACE_DS  0x17

/*
 * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and
 * are read as a bit array returned by USB_REQ_GET_STATUS.  (So there
 * are at most sixteen features of each type.)
 */
/// (read only)
#define USB_DEVICE_SELF_POWERED   0

/// dev may initiate wakeup
#define USB_DEVICE_REMOTE_WAKEUP  1

/// (wired high speed only)
#define USB_DEVICE_TEST_MODE      2

/// (wireless)
#define USB_DEVICE_BATTERY        2

/// (otg) dev may initiate HNP
#define USB_DEVICE_B_HNP_ENABLE   3

/// (wireless
#define USB_DEVICE_WUSB_DEVICE    3

/// (otg) RH port supports HNP
#define USB_DEVICE_A_HNP_SUPPORT  4

/// (otg) other RH port does
#define USB_DEVICE_A_ALT_HNP_SUPPORT  5

/// (special devices only)
#define USB_DEVICE_DEBUG_MODE     6






/// IN/OUT will STALL
#define USB_ENDPOINT_HALT   0


#define USB_SETUP_PACKET_SIZE 8

/**
 * SETUP data for a USB device control request
 *
 * This structure is used to send control requests to a USB device.  It matches
 * the different fields of the USB 2.0 Spec section 9.3, table 9-2.  See the
 * USB spec for a fuller description of the different fields, and what they are
 * used for.
 *
 * Note that the driver for any interface can issue control requests.
 * For most devices, interfaces don't coordinate with each other, so
 * such requests may be made at any time.
 */
struct usb_ctrlrequest {
        /// matches the USB bmRequestType field
        __u8  bRequestType;

        /// matches the USB bRequest field
        __u8  bRequest;

        /// matches the USB wValue field (le16 byte order)
        __u16 wValue;

        /// matches the USB wIndex field (le16 byte order)
        __u16 wIndex;

        /// matches the USB wLength field (le16 byte order)
        __u16 wLength;
}  __attribute__ ((packed));
typedef struct usb_ctrlrequest usb_ctrlrequest_t;


/*
 * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or
 * (rarely) accepted by SET_DESCRIPTOR.
 *
 * Note that all multi-byte values here are encoded in little endian
 * byte order "on the wire".  But when exposed through Linux-USB APIs,
 * they've been converted to cpu byte order.
 */

/*
 * Descriptor types ... USB 2.0 spec table 9.5
 */
#define USB_DT_DEVICE     0x01
#define USB_DT_CONFIG     0x02
#define USB_DT_STRING     0x03
#define USB_DT_INTERFACE    0x04
#define USB_DT_ENDPOINT     0x05
#define USB_DT_DEVICE_QUALIFIER   0x06
#define USB_DT_OTHER_SPEED_CONFIG 0x07
#define USB_DT_INTERFACE_POWER    0x08
/* these are from a minor usb 2.0 revision (ECN) */
#define USB_DT_OTG      0x09
#define USB_DT_DEBUG      0x0a
#define USB_DT_INTERFACE_ASSOCIATION  0x0b
/* these are from the Wireless USB spec */
#define USB_DT_SECURITY     0x0c
#define USB_DT_KEY      0x0d
#define USB_DT_ENCRYPTION_TYPE    0x0e
#define USB_DT_BOS      0x0f
#define USB_DT_DEVICE_CAPABILITY  0x10
#define USB_DT_WIRELESS_ENDPOINT_COMP 0x11

/// conventional codes for class-specific descriptors
#define USB_DT_CS_DEVICE    0x21
/// conventional codes for class-specific descriptors
#define USB_DT_CS_CONFIG    0x22
/// conventional codes for class-specific descriptors
#define USB_DT_CS_STRING    0x23
/// conventional codes for class-specific descriptors
#define USB_DT_CS_INTERFACE   0x24
/// conventional codes for class-specific descriptors
#define USB_DT_CS_ENDPOINT    0x25

/** All standard descriptors have these 2 fields at the beginning */
struct usb_descriptor_header {
        __u8  bLength;
        __u8  bDescriptorType;
} __attribute__ ((packed));
typedef struct usb_descriptor_header usb_descriptor_header_t;



/** USB_DT_DEVICE: Device descriptor */
struct usb_device_descriptor {
        __u8  bLength;
        __u8  bDescriptorType;
        __u16 bcdUSB;
        __u8  bDeviceClass;
        __u8  bDeviceSubClass;
        __u8  bDeviceProtocol;
        __u8  bMaxPacketSize0;
        __u16 idVendor;
        __u16 idProduct;
        __u16 bcdDevice;
        __u8  iManufacturer;
        __u8  iProduct;
        __u8  iSerialNumber;
        __u8  bNumConfigurations;
} __attribute__ ((packed));
typedef struct usb_device_descriptor usb_device_descriptor_t;

#define USB_DT_DEVICE_SIZE    18


/*
 * Device and/or Interface Class codes
 * as found in bDeviceClass or bInterfaceClass
 * and defined by www.usb.org documents
 */
/// for DeviceClass
#define USB_CLASS_PER_INTERFACE   0

#define USB_CLASS_AUDIO     1
#define USB_CLASS_COMM      2
#define USB_CLASS_HID     3
#define USB_CLASS_PHYSICAL    5
#define USB_CLASS_STILL_IMAGE   6
#define USB_CLASS_PRINTER   7
#define USB_CLASS_MASS_STORAGE    8
#define USB_CLASS_HUB     9
#define USB_CLASS_CDC_DATA    0x0a

/// chip+ smart card
#define USB_CLASS_CSCID     0x0b

/// content security
#define USB_CLASS_CONTENT_SEC   0x0d

#define USB_CLASS_VIDEO     0x0e
#define USB_CLASS_WIRELESS_CONTROLLER 0xe0
#define USB_CLASS_MISC			0xef
#define USB_CLASS_APP_SPEC    0xfe
#define USB_CLASS_VENDOR_SPEC   0xff


/**
 * USB_DT_CONFIG: Configuration descriptor information.
 *
 * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
 * descriptor type is different.  Highspeed-capable devices can look
 * different depending on what speed they're currently running.  Only
 * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
 * descriptors.
 */
struct usb_config_descriptor {
        __u8  bLength;
        __u8  bDescriptorType;
        __u16 wTotalLength;
        __u8  bNumInterfaces;
        __u8  bConfigurationValue;
        __u8  iConfiguration;
        __u8  bmAttributes;
        __u8  bMaxPower;

        struct usb_interface *interface;

        /// Extra descriptors
        unsigned char *extra;

        int extralen;
} __attribute__ ((packed));
typedef struct usb_config_descriptor usb_config_descriptor_t;

#define USB_DT_CONFIG_SIZE    9

/* from config descriptor bmAttributes */
/// from config descriptor bmAttributes: must be set
#define USB_CONFIG_ATT_ONE    (1 << 7)

/// from config descriptor bmAttributes: self powered
#define USB_CONFIG_ATT_SELFPOWER  (1 << 6)

/// from config descriptor bmAttributes: can wakeup
#define USB_CONFIG_ATT_WAKEUP   (1 << 5)

/// from config descriptor bmAttributes: battery powered
#define USB_CONFIG_ATT_BATTERY    (1 << 4)


/** USB_DT_STRING: String descriptor */
struct usb_string_descriptor {
        __u8  bLength;
        __u8  bDescriptorType;

        /// UTF-16LE encoded
        __u16 wData[1];
} __attribute__ ((packed));
typedef struct usb_string_descriptor usb_string_descriptor_t;

/*
 * note that "string" zero is special, it holds language codes that
 * the device supports, not Unicode characters.
 */


/** USB_DT_INTERFACE: Interface descriptor */
struct usb_interface_descriptor {
        __u8  bLength;
        __u8  bDescriptorType;
        __u8  bInterfaceNumber;
        __u8  bAlternateSetting;
        __u8  bNumEndpoints;
        __u8  bInterfaceClass;
        __u8  bInterfaceSubClass;
        __u8  bInterfaceProtocol;
        __u8  iInterface;

        struct usb_endpoint_descriptor *endpoint;

        /// Extra descriptors
        unsigned char *extra;

        int extralen;
} __attribute__ ((packed));
typedef struct usb_interface_descriptor usb_interface_descriptor_t;

#if 0
typedef struct usb_interface {
        struct usb_interface_descriptor *altsetting;

        int act_altsetting;             /* active alternate setting */
        int num_altsetting;             /* number of alternate settings */
        int max_altsetting;             /* total memory allocated */

        void *private_data;
} usb_interface_t;
#endif

#define USB_DT_INTERFACE_SIZE   9


/** USB_DT_ENDPOINT: Endpoint descriptor */
struct usb_endpoint_descriptor {
        __u8  bLength;
        __u8  bDescriptorType;

        __u8  bEndpointAddress;
        __u8  bmAttributes;
        __u16 wMaxPacketSize;
        __u8  bInterval;

        /// NOTE:  these two are _only_ in audio endpoints.
        /// use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof.
        __u8  bRefresh;
        __u8  bSynchAddress;

        /// Extra descriptors

        unsigned char *extra;
        int extralen;
} __attribute__ ((packed));
typedef struct usb_endpoint_descriptor usb_endpoint_descriptor_t;

#define USB_DT_ENDPOINT_SIZE    7

/// Audio extension
#define USB_DT_ENDPOINT_AUDIO_SIZE  9


/*
 * Endpoints Macro
 */
/// in bEndpointAddress
#define USB_ENDPOINT_NUMBER_MASK  0x0f

#define USB_ENDPOINT_DIR_MASK   0x80

/// in bmAttributes
#define USB_ENDPOINT_XFERTYPE_MASK  0x03

#define USB_ENDPOINT_XFER_CONTROL 0
#define USB_ENDPOINT_XFER_ISOC    1
#define USB_ENDPOINT_XFER_BULK    2
#define USB_ENDPOINT_XFER_INT   3
#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80



/** USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
struct usb_qualifier_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  __le16 bcdUSB;
  __u8  bDeviceClass;
  __u8  bDeviceSubClass;
  __u8  bDeviceProtocol;
  __u8  bMaxPacketSize0;
  __u8  bNumConfigurations;
  __u8  bRESERVED;
} __attribute__ ((packed));



/** USB_DT_OTG (from OTG 1.0a supplement) */
struct usb_otg_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  /// support for HNP, SRP, etc
  __u8  bmAttributes;
} __attribute__ ((packed));

/// from usb_otg_descriptor.bmAttributes
#define USB_OTG_SRP   (1 << 0)
/// swap host/device roles
#define USB_OTG_HNP   (1 << 1)


/** USB_DT_DEBUG:  for special highspeed devices, replacing serial console */
struct usb_debug_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  /// bulk endpoints with 8 byte maxpacket
  __u8  bDebugInEndpoint;
  __u8  bDebugOutEndpoint;
};


/** USB_DT_INTERFACE_ASSOCIATION: groups interfaces */
struct usb_interface_assoc_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  __u8  bFirstInterface;
  __u8  bInterfaceCount;
  __u8  bFunctionClass;
  __u8  bFunctionSubClass;
  __u8  bFunctionProtocol;
  __u8  iFunction;
};



/**
 * USB_DT_SECURITY:  group of wireless security descriptors, including
 * encryption types available for setting up a CC/association.
 */
struct usb_security_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  __le16 wTotalLength;
  __u8  bNumEncryptionTypes;
};


/**
 * USB_DT_KEY:  used with {GET,SET}_SECURITY_DATA; only public keys
 * may be retrieved.
 */
struct usb_key_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  __u8  tTKID[3];
  __u8  bReserved;
  __u8  bKeyData[0];
};


/** USB_DT_ENCRYPTION_TYPE:  bundled in DT_SECURITY groups */
struct usb_encryption_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  __u8  bEncryptionType;
#define USB_ENC_TYPE_UNSECURE   0

/// non-wireless mode
#define USB_ENC_TYPE_WIRED    1

/// aes128/cbc session
#define USB_ENC_TYPE_CCM_1    2

/// rsa3072/sha1 auth
#define USB_ENC_TYPE_RSA_1    3

  /// use in SET_ENCRYPTION
  __u8  bEncryptionValue;

  __u8  bAuthKeyIndex;
};



/** USB_DT_BOS:  group of wireless capabilities */
struct usb_bos_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  __le16 wTotalLength;
  __u8  bNumDeviceCaps;
};


/** USB_DT_DEVICE_CAPABILITY:  grouped with BOS */
struct usb_dev_cap_header {
  __u8  bLength;
  __u8  bDescriptorType;
  __u8  bDevCapabilityType;
};

#define USB_CAP_TYPE_WIRELESS_USB 1

/** Ultra Wide Band */
struct usb_wireless_cap_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;
  __u8  bDevCapabilityType;

  __u8  bmAttributes;
#define USB_WIRELESS_P2P_DRD    (1 << 1)
#define USB_WIRELESS_BEACON_MASK  (3 << 2)
#define USB_WIRELESS_BEACON_SELF  (1 << 2)
#define USB_WIRELESS_BEACON_DIRECTED  (2 << 2)
#define USB_WIRELESS_BEACON_NONE  (3 << 2)

  /// bit rates, Mbps
  __le16 wPHYRates;

/// always set
#define USB_WIRELESS_PHY_53   (1 << 0)

#define USB_WIRELESS_PHY_80   (1 << 1)

/// always set
#define USB_WIRELESS_PHY_107    (1 << 2)

#define USB_WIRELESS_PHY_160    (1 << 3)

/// always set
#define USB_WIRELESS_PHY_200    (1 << 4)

#define USB_WIRELESS_PHY_320    (1 << 5)
#define USB_WIRELESS_PHY_400    (1 << 6)
#define USB_WIRELESS_PHY_480    (1 << 7)

  /// TFI power levels
  __u8  bmTFITXPowerInfo;

  /// FFI power levels
  __u8  bmFFITXPowerInfo;

  __le16 bmBandGroup;
  __u8  bReserved;
};


/**
 * USB_DT_WIRELESS_ENDPOINT_COMP:  companion descriptor associated with
 * each endpoint descriptor for a wireless device
 */
struct usb_wireless_ep_comp_descriptor {
  __u8  bLength;
  __u8  bDescriptorType;

  __u8  bMaxBurst;
  __u8  bMaxSequence;
  __le16 wMaxStreamDelay;
  __le16 wOverTheAirPacketSize;
  __u8  bOverTheAirInterval;
  __u8  bmCompAttributes;

/// in bmCompAttributes
#define USB_ENDPOINT_SWITCH_MASK  0x03

#define USB_ENDPOINT_SWITCH_NO    0
#define USB_ENDPOINT_SWITCH_SWITCH  1
#define USB_ENDPOINT_SWITCH_SCALE 2
};


/**
 * USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless
 * host and a device for connection set up, mutual authentication, and
 * exchanging short lived session keys.  The handshake depends on a CC.
 */
struct usb_handshake {
  __u8 bMessageNumber;
  __u8 bStatus;
  __u8 tTKID[3];
  __u8 bReserved;
  __u8 CDID[16];
  __u8 nonce[16];
  __u8 MIC[8];
};


/**
 * USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC).
 * A CC may also be set up using non-wireless secure channels (including
 * wired USB!), and some devices may support CCs with multiple hosts.
 */
struct usb_connection_context {
  /// persistent host id
  __u8 CHID[16];

  /// device id (unique w/in host context)
  __u8 CDID[16];

  /// connection key
  __u8 CK[16];
};



/** USB 2.0 defines three speeds, here's how Linux identifies them */

enum usb_device_speed {
  USB_SPEED_UNKNOWN = 0,      /** enumerating */
  USB_SPEED_LOW, USB_SPEED_FULL,    /** usb 1.1 */
  USB_SPEED_HIGH,       /** usb 2.0 */
  USB_SPEED_VARIABLE,     /** wireless (usb 2.5) */
};

/**
 * USB device state
 */
enum usb_device_state {
  /** NOTATTACHED isn't in the USB spec, and this state acts
   * the same as ATTACHED ... but it's clearer this way.
   */
  USB_STATE_NOTATTACHED = 0,

  /** the chapter 9 device states */
  USB_STATE_ATTACHED,
  USB_STATE_POWERED,
  USB_STATE_DEFAULT,     /** limited function */
  USB_STATE_ADDRESS,
  USB_STATE_CONFIGURED,  /** most functions */

  USB_STATE_SUSPENDED    /** Note: there are actually four different SUSPENDED
                             states, returning to POWERED, DEFAULT, ADDRESS, or
                             CONFIGURED respectively when SOF tokens flow again.
                         */
};


/*@}*/
#endif  /* __LINUX_USB_CH9_H */

