Synchronize with U-BOOT mainline
[oweals/u-boot.git] / drivers / usbtty.c
index ed96999e82011cc52f2de9cceb32623a258c46d4..a3b50131dfc1bc47c20f58a3927364e6dd12c6f3 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (C) Copyright 2003
  * Gerry Hamel, geh@ti.com, Texas Instruments
- * 
+ *
  * (C) Copyright 2006
  * Bryan O'Donoghue, bodonoghue@codehermit.ie
  *
@@ -31,7 +31,7 @@
 #include "usb_cdc_acm.h"
 #include "usbdescriptors.h"
 #include <config.h>            /* If defined, override Linux identifiers with
-                                * vendor specific ones */         
+                                * vendor specific ones */
 
 #if 0
 #define TTYDBG(fmt,args...)\
@@ -142,10 +142,10 @@ static struct usb_device_descriptor device_descriptor = {
 
 struct acm_config_desc {
        struct usb_configuration_descriptor configuration_desc;
-       
+
        /* Master Interface */
        struct usb_interface_descriptor interface_desc;
-       
+
        struct usb_class_header_function_descriptor usb_class_header;
        struct usb_class_call_management_descriptor usb_class_call_mgt;
        struct usb_class_abstract_control_descriptor usb_class_acm;
@@ -154,22 +154,22 @@ struct acm_config_desc {
 
        /* Slave Interface */
        struct usb_interface_descriptor data_class_interface;
-       struct usb_endpoint_descriptor 
+       struct usb_endpoint_descriptor
                data_endpoints[NUM_ENDPOINTS-1] __attribute__((packed));
 } __attribute__((packed));
 
 static struct acm_config_desc acm_configuration_descriptors[NUM_CONFIGS] = {
        {
                .configuration_desc ={
-                       .bLength = 
+                       .bLength =
                                sizeof(struct usb_configuration_descriptor),
                        .bDescriptorType = USB_DT_CONFIG,
-                       .wTotalLength =  
+                       .wTotalLength =
                                cpu_to_le16(sizeof(struct acm_config_desc)),
                        .bNumInterfaces = NUM_ACM_INTERFACES,
                        .bConfigurationValue = 1,
                        .iConfiguration = STR_CONFIG,
-                       .bmAttributes = 
+                       .bmAttributes =
                                BMATTRIBUTE_SELF_POWERED|BMATTRIBUTE_RESERVED,
                        .bMaxPower = USBTTY_MAXPOWER
                },
@@ -180,62 +180,62 @@ static struct acm_config_desc acm_configuration_descriptors[NUM_CONFIGS] = {
                        .bInterfaceNumber = 0,
                        .bAlternateSetting = 0,
                        .bNumEndpoints = 0x01,
-                       .bInterfaceClass = 
+                       .bInterfaceClass =
                                COMMUNICATIONS_INTERFACE_CLASS_CONTROL,
                        .bInterfaceSubClass = COMMUNICATIONS_ACM_SUBCLASS,
                        .bInterfaceProtocol = COMMUNICATIONS_V25TER_PROTOCOL,
                        .iInterface = STR_CTRL_INTERFACE,
                },
                .usb_class_header = {
-                       .bFunctionLength        = 
+                       .bFunctionLength        =
                                sizeof(struct usb_class_header_function_descriptor),
-                       .bDescriptorType        = CS_INTERFACE, 
+                       .bDescriptorType        = CS_INTERFACE,
                        .bDescriptorSubtype     = USB_ST_HEADER,
                        .bcdCDC = cpu_to_le16(110),
                },
                .usb_class_call_mgt = {
-                       .bFunctionLength        = 
+                       .bFunctionLength        =
                                sizeof(struct usb_class_call_management_descriptor),
                        .bDescriptorType        = CS_INTERFACE,
                        .bDescriptorSubtype     = USB_ST_CMF,
-                       .bmCapabilities         = 0x00, 
-                       .bDataInterface         = 0x01, 
+                       .bmCapabilities         = 0x00,
+                       .bDataInterface         = 0x01,
                },
                .usb_class_acm = {
-                       .bFunctionLength        = 
+                       .bFunctionLength        =
                                sizeof(struct usb_class_abstract_control_descriptor),
                        .bDescriptorType        = CS_INTERFACE,
-                       .bDescriptorSubtype     = USB_ST_ACMF,  
-                       .bmCapabilities         = 0x00, 
+                       .bDescriptorSubtype     = USB_ST_ACMF,
+                       .bmCapabilities         = 0x00,
                },
                .usb_class_union = {
-                       .bFunctionLength        =       
+                       .bFunctionLength        =
                                sizeof(struct usb_class_union_function_descriptor),
                        .bDescriptorType        = CS_INTERFACE,
                        .bDescriptorSubtype     = USB_ST_UF,
-                       .bMasterInterface       = 0x00, 
-                       .bSlaveInterface0       = 0x01, 
+                       .bMasterInterface       = 0x00,
+                       .bSlaveInterface0       = 0x01,
                },
                .notification_endpoint = {
-                       .bLength =              
+                       .bLength =
                                sizeof(struct usb_endpoint_descriptor),
                        .bDescriptorType        = USB_DT_ENDPOINT,
                        .bEndpointAddress       = 0x01 | USB_DIR_IN,
                        .bmAttributes           = USB_ENDPOINT_XFER_INT,
-                       .wMaxPacketSize         
+                       .wMaxPacketSize
                                = cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
                        .bInterval              = 0xFF,
                },
 
                /* Interface 2 */
                .data_class_interface = {
-                       .bLength                = 
+                       .bLength                =
                                sizeof(struct usb_interface_descriptor),
                        .bDescriptorType        = USB_DT_INTERFACE,
                        .bInterfaceNumber       = 0x01,
                        .bAlternateSetting      = 0x00,
                        .bNumEndpoints          = 0x02,
-                       .bInterfaceClass        = 
+                       .bInterfaceClass        =
                                COMMUNICATIONS_INTERFACE_CLASS_DATA,
                        .bInterfaceSubClass     = DATA_INTERFACE_SUBCLASS_NONE,
                        .bInterfaceProtocol     = DATA_INTERFACE_PROTOCOL_NONE,
@@ -243,30 +243,30 @@ static struct acm_config_desc acm_configuration_descriptors[NUM_CONFIGS] = {
                },
                .data_endpoints = {
                        {
-                               .bLength                = 
+                               .bLength                =
                                        sizeof(struct usb_endpoint_descriptor),
                                .bDescriptorType        = USB_DT_ENDPOINT,
                                .bEndpointAddress       = 0x02 | USB_DIR_OUT,
-                               .bmAttributes           = 
+                               .bmAttributes           =
                                        USB_ENDPOINT_XFER_BULK,
-                               .wMaxPacketSize         = 
+                               .wMaxPacketSize         =
                                        cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
                                .bInterval              = 0xFF,
                        },
                        {
-                               .bLength                = 
+                               .bLength                =
                                        sizeof(struct usb_endpoint_descriptor),
                                .bDescriptorType        = USB_DT_ENDPOINT,
                                .bEndpointAddress       = 0x03 | USB_DIR_IN,
-                               .bmAttributes           = 
+                               .bmAttributes           =
                                        USB_ENDPOINT_XFER_BULK,
-                               .wMaxPacketSize         = 
+                               .wMaxPacketSize         =
                                        cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
                                .bInterval              = 0xFF,
                        },
                },
        },
-};     
+};
 
 static struct rs232_emu rs232_desc={
                .dter           =       115200,
@@ -282,75 +282,75 @@ static struct rs232_emu rs232_desc={
 
 
 struct gserial_config_desc {
-       
+
        struct usb_configuration_descriptor configuration_desc;
-       struct usb_interface_descriptor 
+       struct usb_interface_descriptor
                interface_desc[NUM_GSERIAL_INTERFACES] __attribute__((packed));
-       struct usb_endpoint_descriptor 
+       struct usb_endpoint_descriptor
                data_endpoints[NUM_ENDPOINTS] __attribute__((packed));
 
 } __attribute__((packed));
 
-static struct gserial_config_desc 
+static struct gserial_config_desc
 gserial_configuration_descriptors[NUM_CONFIGS] ={
        {
                .configuration_desc ={
                        .bLength = sizeof(struct usb_configuration_descriptor),
                        .bDescriptorType = USB_DT_CONFIG,
-                       .wTotalLength =  
+                       .wTotalLength =
                                cpu_to_le16(sizeof(struct gserial_config_desc)),
                        .bNumInterfaces = NUM_GSERIAL_INTERFACES,
                        .bConfigurationValue = 1,
                        .iConfiguration = STR_CONFIG,
-                       .bmAttributes = 
+                       .bmAttributes =
                                BMATTRIBUTE_SELF_POWERED|BMATTRIBUTE_RESERVED,
                        .bMaxPower = USBTTY_MAXPOWER
                },
                .interface_desc = {
                        {
-                               .bLength  = 
+                               .bLength  =
                                        sizeof(struct usb_interface_descriptor),
                                .bDescriptorType = USB_DT_INTERFACE,
                                .bInterfaceNumber = 0,
                                .bAlternateSetting = 0,
                                .bNumEndpoints = NUM_ENDPOINTS,
-                               .bInterfaceClass = 
+                               .bInterfaceClass =
                                        COMMUNICATIONS_INTERFACE_CLASS_VENDOR,
-                               .bInterfaceSubClass = 
+                               .bInterfaceSubClass =
                                        COMMUNICATIONS_NO_SUBCLASS,
-                               .bInterfaceProtocol = 
+                               .bInterfaceProtocol =
                                        COMMUNICATIONS_NO_PROTOCOL,
                                .iInterface = STR_DATA_INTERFACE
                        },
                },
                .data_endpoints  = {
                        {
-                               .bLength =              
+                               .bLength =
                                        sizeof(struct usb_endpoint_descriptor),
                                .bDescriptorType =      USB_DT_ENDPOINT,
                                .bEndpointAddress =     0x01 | USB_DIR_OUT,
                                .bmAttributes =         USB_ENDPOINT_XFER_BULK,
-                               .wMaxPacketSize =       
+                               .wMaxPacketSize =
                                        cpu_to_le16(CONFIG_USBD_SERIAL_OUT_PKTSIZE),
                                .bInterval=             0xFF,
                        },
                        {
-                               .bLength =              
+                               .bLength =
                                        sizeof(struct usb_endpoint_descriptor),
                                .bDescriptorType =      USB_DT_ENDPOINT,
                                .bEndpointAddress =     0x02 | USB_DIR_IN,
                                .bmAttributes =         USB_ENDPOINT_XFER_BULK,
-                               .wMaxPacketSize =       
+                               .wMaxPacketSize =
                                        cpu_to_le16(CONFIG_USBD_SERIAL_IN_PKTSIZE),
                                .bInterval =            0xFF,
                        },
                        {
-                               .bLength =              
+                               .bLength =
                                        sizeof(struct usb_endpoint_descriptor),
                                .bDescriptorType =      USB_DT_ENDPOINT,
                                .bEndpointAddress =     0x03 | USB_DIR_IN,
                                .bmAttributes =         USB_ENDPOINT_XFER_INT,
-                               .wMaxPacketSize =       
+                               .wMaxPacketSize =
                                        cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
                                .bInterval =            0xFF,
                        },
@@ -368,7 +368,7 @@ static void usbtty_init_endpoints (void);
 static void usbtty_init_terminal_type(short type);
 static void usbtty_event_handler (struct usb_device_instance *device,
                                usb_device_event_t event, int data);
-static int usbtty_cdc_setup(struct usb_device_request *request, 
+static int usbtty_cdc_setup(struct usb_device_request *request,
                                struct urb *urb);
 static int usbtty_configured (void);
 static int write_buffer (circbuf_t * buf);
@@ -381,12 +381,12 @@ static void str2wide (char *str, u16 * wide)
 {
        int i;
        for (i = 0; i < strlen (str) && str[i]; i++){
-               #if defined(__LITTLE_ENDIAN__)
+               #if defined(__LITTLE_ENDIAN)
                        wide[i] = (u16) str[i];
-               #elif defined(__BIG_ENDIAN__)
+               #elif defined(__BIG_ENDIAN)
                        wide[i] = ((u16)(str[i])<<8);
                #else
-                       #error "__LITTLE_ENDIAN__ or __BIG_ENDIAN__ undefined"
+                       #error "__LITTLE_ENDIAN or __BIG_ENDIAN undefined"
                #endif
        }
 }
@@ -477,12 +477,12 @@ static void __usbtty_puts (const char *str, int len)
                /* Empty buffer here, if needed, to ensure space... */
                if (space) {
                        write_buffer (&usbtty_output);
-                       
+
                        n = MIN (space, MIN (len, maxlen));
                        buf_push (&usbtty_output, str, n);
 
                        str += n;
-                       len -= n;                       
+                       len -= n;
                }
        }
 }
@@ -543,7 +543,7 @@ int drv_usbtty_init (void)
                tt = "generic";
        }
        usbtty_init_terminal_type(strcmp(tt,"cdc_acm"));
-       
+
        /* prepare buffers... */
        buf_init (&usbtty_input, USBTTY_BUFFER_SIZE);
        buf_init (&usbtty_output, USBTTY_BUFFER_SIZE);
@@ -579,7 +579,7 @@ static void usbtty_init_strings (void)
 {
        struct usb_string_descriptor *string;
 
-       usbtty_string_table[STR_LANG] = 
+       usbtty_string_table[STR_LANG] =
                (struct usb_string_descriptor*)wstrLang;
 
        string = (struct usb_string_descriptor *) wstrManufacturer;
@@ -624,7 +624,7 @@ static void usbtty_init_strings (void)
 
        /* Now, initialize the string table for ep0 handling */
        usb_strings = usbtty_string_table;
-}      
+}
 
 static void usbtty_init_instances (void)
 {
@@ -690,7 +690,7 @@ static void usbtty_init_instances (void)
 
                endpoint_instance[i].rcv_packetSize =
                        le16_to_cpu(ep_descriptor_ptrs[i - 1]->wMaxPacketSize);
-               
+
                endpoint_instance[i].tx_attributes =
                        ep_descriptor_ptrs[i - 1]->bmAttributes;
 
@@ -721,30 +721,30 @@ static void usbtty_init_endpoints (void)
        int i;
 
        bus_instance->max_endpoints = NUM_ENDPOINTS + 1;
-       for (i = 1; i <= NUM_ENDPOINTS; i++) {          
+       for (i = 1; i <= NUM_ENDPOINTS; i++) {
                udc_setup_ep (device_instance, i, &endpoint_instance[i]);
        }
 }
 
 /* usbtty_init_terminal_type
- * 
+ *
  * Do some late binding for our device type.
  */
 static void usbtty_init_terminal_type(short type)
 {
        switch(type){
-               /* CDC ACM */                   
+               /* CDC ACM */
                case 0:
                        /* Assign endpoint descriptors */
-                       ep_descriptor_ptrs[0] = 
+                       ep_descriptor_ptrs[0] =
                                &acm_configuration_descriptors[0].notification_endpoint;
-                       ep_descriptor_ptrs[1] = 
+                       ep_descriptor_ptrs[1] =
                                &acm_configuration_descriptors[0].data_endpoints[0];
-                       ep_descriptor_ptrs[2] = 
+                       ep_descriptor_ptrs[2] =
                                &acm_configuration_descriptors[0].data_endpoints[1];
 
                        /* Enumerate Device Descriptor */
-                       device_descriptor.bDeviceClass = 
+                       device_descriptor.bDeviceClass =
                                COMMUNICATIONS_DEVICE_CLASS;
                        device_descriptor.idProduct =
                                cpu_to_le16(CONFIG_USBD_PRODUCTID_CDCACM);
@@ -752,7 +752,7 @@ static void usbtty_init_terminal_type(short type)
                        /* Assign endpoint indices */
                        tx_endpoint = ACM_TX_ENDPOINT;
                        rx_endpoint = ACM_RX_ENDPOINT;
-                       
+
                        /* Configuration Descriptor */
                        configuration_descriptor =
                                (struct usb_configuration_descriptor*)
@@ -766,11 +766,11 @@ static void usbtty_init_terminal_type(short type)
                case 1:
                default:
                        /* Assign endpoint descriptors */
-                       ep_descriptor_ptrs[0] = 
+                       ep_descriptor_ptrs[0] =
                                &gserial_configuration_descriptors[0].data_endpoints[0];
-                       ep_descriptor_ptrs[1] = 
+                       ep_descriptor_ptrs[1] =
                                &gserial_configuration_descriptors[0].data_endpoints[1];
-                       ep_descriptor_ptrs[2] = 
+                       ep_descriptor_ptrs[2] =
                                &gserial_configuration_descriptors[0].data_endpoints[2];
 
                        /* Enumerate Device Descriptor */
@@ -783,7 +783,7 @@ static void usbtty_init_terminal_type(short type)
                        rx_endpoint = GSERIAL_RX_ENDPOINT;
 
                        /* Configuration Descriptor */
-                       configuration_descriptor = 
+                       configuration_descriptor =
                                (struct usb_configuration_descriptor*)
                                &gserial_configuration_descriptors;
 
@@ -832,14 +832,14 @@ static int write_buffer (circbuf_t * buf)
        if (!usbtty_configured ()) {
                return 0;
        }
-       
+
        struct usb_endpoint_instance *endpoint =
                        &endpoint_instance[tx_endpoint];
        struct urb *current_urb = NULL;
 
        current_urb = next_urb (device_instance, endpoint);
-       /* TX data still exists - send it now 
-        */     
+       /* TX data still exists - send it now
+        */
        if(endpoint->sent < current_urb->actual_length){
                if(udc_endpoint_write (endpoint)){
                        /* Write pre-empted by RX */
@@ -854,11 +854,11 @@ static int write_buffer (circbuf_t * buf)
                int popnum, popped;
                int total = 0;
 
-               /* Break buffer into urb sized pieces, 
-                * and link each to the endpoint 
+               /* Break buffer into urb sized pieces,
+                * and link each to the endpoint
                 */
                while (buf->size > 0) {
-                       
+
                        if (!current_urb) {
                                TTYERR ("current_urb is NULL, buf->size %d\n",
                                        buf->size);
@@ -881,8 +881,8 @@ static int write_buffer (circbuf_t * buf)
                        current_urb->actual_length += popped;
                        total += popped;
 
-                       /* If endpoint->last == 0, then transfers have 
-                        * not started on this endpoint 
+                       /* If endpoint->last == 0, then transfers have
+                        * not started on this endpoint
                         */
                        if (endpoint->last == 0) {
                                if(udc_endpoint_write (endpoint)){
@@ -904,7 +904,7 @@ static int fill_buffer (circbuf_t * buf)
                &endpoint_instance[rx_endpoint];
 
        if (endpoint->rcv_urb && endpoint->rcv_urb->actual_length) {
-               unsigned int nb = 0; 
+               unsigned int nb = 0;
                char *src = (char *) endpoint->rcv_urb->buffer;
                unsigned int rx_avail = buf->totalsize - buf->size;
 
@@ -913,7 +913,7 @@ static int fill_buffer (circbuf_t * buf)
                        nb = endpoint->rcv_urb->actual_length;
                        buf_push (buf, src, nb);
                        endpoint->rcv_urb->actual_length = 0;
-                       
+
                }
                return nb;
        }
@@ -958,7 +958,7 @@ int usbtty_cdc_setup(struct usb_device_request *request, struct urb *urb)
                case ACM_SEND_ENCAPSULATED_COMMAND :    /* Required */
                        break;
                case ACM_SET_LINE_ENCODING :            /* DTE stop/parity bits
-                                                        * per character */             
+                                                        * per character */
                        break;
                case ACM_GET_ENCAPSULATED_RESPONSE :    /* request response */
                        break;
@@ -986,8 +986,8 @@ void usbtty_poll (void)
        /* New interrupts? */
        udc_irq();
 
-       /* Write any output data to host buffer 
-        * (do this before checking interrupts to avoid missing one) 
+       /* Write any output data to host buffer
+        * (do this before checking interrupts to avoid missing one)
         */
        if (usbtty_configured ()) {
                write_buffer (&usbtty_output);
@@ -995,9 +995,9 @@ void usbtty_poll (void)
 
        /* New interrupts? */
        udc_irq();
-       
-       /* Check for new data from host.. 
-        * (do this after checking interrupts to get latest data) 
+
+       /* Check for new data from host..
+        * (do this after checking interrupts to get latest data)
         */
        if (usbtty_configured ()) {
                fill_buffer (&usbtty_input);