Changeset df949c5 in mainline


Ignore:
Timestamp:
2011-03-11T17:33:50Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
dd6f59f
Parents:
b3bdb68 (diff), bf4cc3e (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:

Get max_packet_size when initializing default pipe

UHCI root hub refactoring

Location:
uspace
Files:
1 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-hcd/iface.c

    rb3bdb68 rdf949c5  
    280280        assert(hc);
    281281        usb_speed_t speed = device_keeper_speed(&hc->device_manager, target.address);
    282         usb_log_debug("Control WRITE %d:%d %zu(%zu).\n",
    283             target.address, target.endpoint, size, max_packet_size);
     282        usb_log_debug("Control WRITE (%d) %d:%d %zu(%zu).\n",
     283            speed, target.address, target.endpoint, size, max_packet_size);
    284284
    285285        if (setup_size != 8)
     
    319319        usb_speed_t speed = device_keeper_speed(&hc->device_manager, target.address);
    320320
    321         usb_log_debug("Control READ %d:%d %zu(%zu).\n",
    322             target.address, target.endpoint, size, max_packet_size);
     321        usb_log_debug("Control READ(%d) %d:%d %zu(%zu).\n",
     322            speed, target.address, target.endpoint, size, max_packet_size);
    323323        batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL,
    324324            max_packet_size, speed, data, size, setup_data, setup_size, callback,
  • uspace/drv/uhci-hcd/uhci.c

    rb3bdb68 rdf949c5  
    356356
    357357        transfer_list_t *list =
    358             instance->transfers[low_speed][batch->transfer_type];
     358            instance->transfers[batch->speed][batch->transfer_type];
    359359        assert(list);
    360360        transfer_list_add_batch(list, batch);
  • uspace/drv/uhci-rhd/Makefile

    rb3bdb68 rdf949c5  
    3535        main.c \
    3636        port.c \
    37         port_status.c \
    3837        root_hub.c
    3938
  • uspace/drv/uhci-rhd/port.c

    rb3bdb68 rdf949c5  
    6767{
    6868        assert(port);
     69        asprintf(&port->id_string, "Port (%p - %d)", port, number);
     70        if (port->id_string == NULL) {
     71                return ENOMEM;
     72        }
    6973
    7074        port->address = address;
     
    116120        assert(instance);
    117121
    118         /* Iteration count, for debug purposes only */
    119         unsigned count = 0;
    120 
    121122        while (1) {
    122123                async_usleep(instance->wait_period_usec);
    123124
    124125                /* 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);
     126                port_status_t port_status = uhci_port_read_status(instance);
     127
     128                print_port_status(instance->id_string, port_status);
    135129
    136130                if ((port_status & STATUS_CONNECTED_CHANGED) == 0)
    137131                        continue;
    138132
    139                 usb_log_debug("Port(%p - %d): Connected change detected: %x.\n",
    140                     instance->address, instance->number, port_status);
     133                usb_log_debug("%s: Connected change detected: %x.\n",
     134                    instance->id_string, port_status);
    141135
    142136                int rc =
    143137                    usb_hc_connection_open(&instance->hc_connection);
    144138                if (rc != EOK) {
    145                         usb_log_error("Port(%p - %d): Failed to connect to HC.",
    146                             instance->address, instance->number);
     139                        usb_log_error("%s: Failed to connect to HC.",
     140                            instance->id_string);
    147141                        continue;
    148142                }
     
    150144                /* Remove any old device */
    151145                if (instance->attached_device) {
    152                         usb_log_debug2("Port(%p - %d): Removing device.\n",
    153                             instance->address, instance->number);
     146                        usb_log_debug2("%s: Removing device.\n",
     147                            instance->id_string);
    154148                        uhci_port_remove_device(instance);
    155149                }
     
    163157                } else {
    164158                        /* 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);
     159                        uhci_port_write_status(instance, port_status);
     160                        usb_log_debug("%s: Change status ACK.\n",
     161                            instance->id_string);
    168162                }
    169163
    170164                rc = usb_hc_connection_close(&instance->hc_connection);
    171165                if (rc != EOK) {
    172                         usb_log_error("Port(%p - %d): Failed to disconnect.",
    173                             instance->address, instance->number);
     166                        usb_log_error("%s: Failed to disconnect.",
     167                            instance->id_string);
    174168                }
    175169        }
     
    187181        uhci_port_t *port = (uhci_port_t *) arg;
    188182
    189         usb_log_debug2("Port(%p - %d): new_device_enable_port.\n",
    190             port->address, port->number);
     183        usb_log_debug2("%s: new_device_enable_port.\n",
     184            port->id_string);
    191185
    192186        /*
     
    201195         */
    202196        {
    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);
     197                usb_log_debug("%s: Reset Signal start.\n",
     198                    port->id_string);
     199                port_status_t port_status = uhci_port_read_status(port);
    207200                port_status |= STATUS_IN_RESET;
    208                 port_status_write(port->address, port_status);
     201                uhci_port_write_status(port, port_status);
    209202                async_usleep(10000);
    210                 port_status = port_status_read(port->address);
     203                port_status = uhci_port_read_status(port);
    211204                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);
     205                uhci_port_write_status(port, port_status);
     206                usb_log_debug("%s: Reset Signal stop.\n",
     207                    port->id_string);
    215208        }
    216209
     
    233226        assert(usb_hc_connection_is_opened(&port->hc_connection));
    234227
    235         usb_log_info("Port(%p-%d): Detected new device.\n",
    236             port->address, port->number);
     228        usb_log_info("%s: Detected new device.\n",
     229            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}
  • uspace/drv/uhci-rhd/port.h

    rb3bdb68 rdf949c5  
    4444typedef struct uhci_port
    4545{
     46        char *id_string;
    4647        port_status_t *address;
    4748        unsigned number;
     
    5859
    5960void uhci_port_fini(uhci_port_t *port);
     61
     62static inline port_status_t uhci_port_read_status(uhci_port_t *port)
     63{
     64        assert(port);
     65        return pio_read_16(port->address);
     66}
     67
     68static inline void uhci_port_write_status(
     69    uhci_port_t *port, port_status_t value)
     70{
     71        assert(port);
     72        pio_write_16(port->address, value);
     73}
    6074#endif
    6175/**
  • uspace/drv/uhci-rhd/port_status.h

    rb3bdb68 rdf949c5  
    5454#define STATUS_SUSPEND   (1 << 12)
    5555
    56 static inline port_status_t port_status_read(port_status_t * address)
    57         { return pio_read_16(address); }
    5856
    59 static inline void port_status_write(
    60   port_status_t *address, port_status_t value)
    61         { pio_write_16(address, value); }
    62 
    63 void print_port_status(const port_status_t status);
     57static inline void print_port_status(
     58    const char* prefix, const port_status_t value)
     59{
     60        usb_log_debug2("%s Port status:%s%s%s%s%s%s%s%s.\n",
     61            prefix,
     62            (value & STATUS_SUSPEND) ? " SUSPENDED," : "",
     63            (value & STATUS_IN_RESET) ? " IN RESET," : "",
     64            (value & STATUS_LOW_SPEED) ? " LOWSPEED," : "",
     65            (value & STATUS_ENABLED_CHANGED) ? " ENABLED-CHANGE," : "",
     66            (value & STATUS_ENABLED) ? " ENABLED," : "",
     67            (value & STATUS_CONNECTED_CHANGED) ? " CONNECTED-CHANGE," : "",
     68            (value & STATUS_CONNECTED) ? " CONNECTED," : "",
     69            (value & STATUS_ALWAYS_ONE) ? " ALWAYS ONE" : " ERROR: NO ALWAYS ONE"
     70        );
     71}
    6472#endif
    6573/**
  • uspace/lib/usb/src/pipesinit.c

    rb3bdb68 rdf949c5  
    3737#include <usb/pipes.h>
    3838#include <usb/dp.h>
     39#include <usb/request.h>
    3940#include <errno.h>
    4041#include <assert.h>
     
    370371        int rc = usb_endpoint_pipe_initialize(pipe, connection,
    371372            0, USB_TRANSFER_CONTROL, 8, USB_DIRECTION_BOTH);
    372 
     373        if (rc != EOK) {
     374                return rc;
     375        }
     376        rc = usb_endpoint_pipe_start_session(pipe);
     377        if (rc != EOK) {
     378                return rc;
     379        }
     380
     381        uint8_t first[8];
     382        size_t size = 0;
     383        rc = usb_control_request_get(pipe, USB_REQUEST_TYPE_STANDARD,
     384            USB_REQUEST_RECIPIENT_DEVICE, USB_DEVREQ_GET_DESCRIPTOR, 1 << 8,
     385                        0, first, 8, &size);
     386        usb_endpoint_pipe_end_session(pipe);
     387        if (rc != EOK || size  != 8) {
     388                return rc;
     389        }
     390
     391        pipe->max_packet_size = first[7];
    373392        return rc;
    374393}
Note: See TracChangeset for help on using the changeset viewer.