Changeset 1b0b86e6 in mainline for uspace/drv/uhci-rhd/port.c


Ignore:
Timestamp:
2011-03-13T22:02:44Z (13 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b7d8fd9
Parents:
67f54965 (diff), deb4ba7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge development/ changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-rhd/port.c

    r67f54965 r1b0b86e6  
    4444
    4545#include "port.h"
    46 #include "port_status.h"
    4746
    4847static int uhci_port_new_device(uhci_port_t *port, usb_speed_t speed);
     
    6766{
    6867        assert(port);
     68        asprintf(&port->id_string, "Port (%p - %d)", port, number);
     69        if (port->id_string == NULL) {
     70                return ENOMEM;
     71        }
    6972
    7073        port->address = address;
     
    116119        assert(instance);
    117120
    118         /* Iteration count, for debug purposes only */
    119         unsigned count = 0;
    120 
    121121        while (1) {
    122122                async_usleep(instance->wait_period_usec);
    123123
    124124                /* read register value */
    125                 port_status_t port_status = port_status_read(instance->address);
    126 
    127                 /* debug print mutex */
    128                 static fibril_mutex_t dbg_mtx =
    129                     FIBRIL_MUTEX_INITIALIZER(dbg_mtx);
    130                 fibril_mutex_lock(&dbg_mtx);
    131                 usb_log_debug2("Port(%p - %d): Status: %#04x. === %u\n",
    132                   instance->address, instance->number, port_status, count++);
    133 //              print_port_status(port_status);
    134                 fibril_mutex_unlock(&dbg_mtx);
     125                port_status_t port_status = uhci_port_read_status(instance);
     126
     127                /* print the value if it's interesting */
     128                if (port_status & ~STATUS_ALWAYS_ONE)
     129                        uhci_port_print_status(instance, port_status);
    135130
    136131                if ((port_status & STATUS_CONNECTED_CHANGED) == 0)
    137132                        continue;
    138133
    139                 usb_log_debug("Port(%p - %d): Connected change detected: %x.\n",
    140                     instance->address, instance->number, port_status);
     134                usb_log_debug("%s: Connected change detected: %x.\n",
     135                    instance->id_string, port_status);
    141136
    142137                int rc =
    143138                    usb_hc_connection_open(&instance->hc_connection);
    144139                if (rc != EOK) {
    145                         usb_log_error("Port(%p - %d): Failed to connect to HC.",
    146                             instance->address, instance->number);
     140                        usb_log_error("%s: Failed to connect to HC.",
     141                            instance->id_string);
    147142                        continue;
    148143                }
     
    150145                /* Remove any old device */
    151146                if (instance->attached_device) {
    152                         usb_log_debug2("Port(%p - %d): Removing device.\n",
    153                             instance->address, instance->number);
     147                        usb_log_debug2("%s: Removing device.\n",
     148                            instance->id_string);
    154149                        uhci_port_remove_device(instance);
    155150                }
     
    163158                } else {
    164159                        /* Write one to WC bits, to ack changes */
    165                         port_status_write(instance->address, port_status);
    166                         usb_log_debug("Port(%p - %d): Change status ACK.\n",
    167                             instance->address, instance->number);
     160                        uhci_port_write_status(instance, port_status);
     161                        usb_log_debug("%s: status change ACK.\n",
     162                            instance->id_string);
    168163                }
    169164
    170165                rc = usb_hc_connection_close(&instance->hc_connection);
    171166                if (rc != EOK) {
    172                         usb_log_error("Port(%p - %d): Failed to disconnect.",
    173                             instance->address, instance->number);
     167                        usb_log_error("%s: Failed to disconnect.",
     168                            instance->id_string);
    174169                }
    175170        }
     
    187182        uhci_port_t *port = (uhci_port_t *) arg;
    188183
    189         usb_log_debug2("Port(%p - %d): new_device_enable_port.\n",
    190             port->address, port->number);
     184        usb_log_debug2("%s: new_device_enable_port.\n", port->id_string);
    191185
    192186        /*
     
    196190        async_usleep(100000);
    197191
    198 
    199         /* The hub maintains the reset signal to that port for 10 ms
    200          * (See Section 11.5.1.5)
     192        /*
     193         * Resets from root ports should be nominally 50ms
    201194         */
    202195        {
    203                 usb_log_debug("Port(%p - %d): Reset Signal start.\n",
    204                     port->address, port->number);
    205                 port_status_t port_status =
    206                         port_status_read(port->address);
     196                usb_log_debug("%s: Reset Signal start.\n", port->id_string);
     197                port_status_t port_status = uhci_port_read_status(port);
    207198                port_status |= STATUS_IN_RESET;
    208                 port_status_write(port->address, port_status);
    209                 async_usleep(10000);
    210                 port_status = port_status_read(port->address);
     199                uhci_port_write_status(port, port_status);
     200                async_usleep(50000);
     201                port_status = uhci_port_read_status(port);
    211202                port_status &= ~STATUS_IN_RESET;
    212                 port_status_write(port->address, port_status);
    213                 usb_log_debug("Port(%p - %d): Reset Signal stop.\n",
    214                     port->address, port->number);
    215         }
     203                uhci_port_write_status(port, port_status);
     204                usb_log_debug("%s: Reset Signal stop.\n", port->id_string);
     205        }
     206
     207        /* the reset recovery time 10ms */
     208        async_usleep(10000);
    216209
    217210        /* Enable the port. */
    218211        uhci_port_set_enabled(port, true);
     212
    219213        return EOK;
    220214}
     
    233227        assert(usb_hc_connection_is_opened(&port->hc_connection));
    234228
    235         usb_log_info("Port(%p-%d): Detected new device.\n",
    236             port->address, port->number);
     229        usb_log_info("%s: Detected new device.\n", port->id_string);
    237230
    238231        usb_address_t dev_addr;
     
    242235
    243236        if (rc != EOK) {
    244                 usb_log_error("Port(%p-%d): Failed(%d) to add device: %s.\n",
    245                     port->address, port->number, rc, str_error(rc));
     237                usb_log_error("%s: Failed(%d) to add device: %s.\n",
     238                    port->id_string, rc, str_error(rc));
    246239                uhci_port_set_enabled(port, false);
    247240                return rc;
    248241        }
    249242
    250         usb_log_info("Port(%p-%d): New device has address %d (handle %zu).\n",
    251             port->address, port->number, dev_addr, port->attached_device);
     243        usb_log_info("%s: New device has address %d (handle %zu).\n",
     244            port->id_string, dev_addr, port->attached_device);
    252245
    253246        return EOK;
     
    263256int uhci_port_remove_device(uhci_port_t *port)
    264257{
    265         usb_log_error("Port(%p-%d): Don't know how to remove device %#x.\n",
    266             port->address, port->number, (unsigned int)port->attached_device);
     258        usb_log_error("%s: Don't know how to remove device %d.\n",
     259            port->id_string, (unsigned int)port->attached_device);
    267260        return EOK;
    268261}
     
    278271
    279272        /* Read register value */
    280         port_status_t port_status = port_status_read(port->address);
     273        port_status_t port_status = uhci_port_read_status(port);
    281274
    282275        /* Set enabled bit */
     
    288281
    289282        /* Write new value. */
    290         port_status_write(port->address, port_status);
    291 
    292         usb_log_info("Port(%p-%d): %sabled port.\n",
    293                 port->address, port->number, enabled ? "En" : "Dis");
     283        uhci_port_write_status(port, port_status);
     284
     285        usb_log_info("%s: %sabled port.\n",
     286                port->id_string, enabled ? "En" : "Dis");
    294287        return EOK;
    295288}
Note: See TracChangeset for help on using the changeset viewer.