Changes in / [b3258ad:4046c1ea] in mainline


Ignore:
Location:
uspace/drv/uhci
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci/callback.c

    rb3258ad r4046c1ea  
    99        assert(instance);
    1010        assert(func_in == NULL || func_out == NULL);
    11         instance->new_buffer = malloc32(size);
    12         if (!instance->new_buffer) {
    13                 uhci_print_error("Failed to allocate device acessible buffer.\n");
    14                 return ENOMEM;
     11        if (size > 0) {
     12                instance->new_buffer = malloc32(size);
     13                if (!instance->new_buffer) {
     14                        uhci_print_error("Failed to allocate device acessible buffer.\n");
     15                        return ENOMEM;
     16                }
     17                if (func_out)
     18                        memcpy(instance->new_buffer, buffer, size);
     19        } else {
     20                instance->new_buffer = NULL;
    1521        }
    1622
    17         if (func_out)
    18                 memcpy(instance->new_buffer, buffer, size);
    1923
    2024        instance->callback_out = func_out;
  • uspace/drv/uhci/root_hub/port.c

    rb3258ad r4046c1ea  
    4444                        if (port_status & STATUS_CONNECTED) {
    4545                                /* new device */
    46                                 port_status |= STATUS_IN_RESET;
    47                                 port_status_write(port_instance->address, port_status);
    48                                 async_usleep(1000);
    49                                 port_status =
    50                                         port_status_read(port_instance->address);
    51                                 port_status &= ~STATUS_IN_RESET;
    52                                 port_status_write(port_instance->address, port_status);
    5346                                uhci_port_new_device(port_instance);
    5447                        } else {
     
    7972                return usb_address;
    8073        }
     74        /*
     75         * the host then waits for at least 100 ms to allow completion of
     76         * an insertion process and for power at the device to become stable.
     77         */
     78        async_usleep(100000);
    8179
    8280        /* enable port */
    8381        uhci_port_set_enabled(port, true);
     82
     83        /* The hub maintains the reset signal to that port for 10 ms
     84         * (See Section 11.5.1.5)
     85         */
     86        port_status_t port_status =
     87                port_status_read(port->address);
     88        port_status |= STATUS_IN_RESET;
     89        port_status_write(port->address, port_status);
     90        async_usleep(10000);
     91        port_status =
     92                port_status_read(port->address);
     93        port_status &= ~STATUS_IN_RESET;
     94        port_status_write(port->address, port_status);
    8495
    8596        /* assign address to device */
  • uspace/drv/uhci/uhci.c

    rb3258ad r4046c1ea  
    175175        assert(instance);
    176176
     177        uhci_print_verbose("Appending a new transfer to queue.\n");
    177178        ret = transfer_list_append(&instance->transfers[transfer_type], td);
    178179        CHECK_RET_TRANS_FREE_JOB_TD("Failed to append transfer descriptor.\n");
     
    227228                uint16_t reg;
    228229                reg = pio_read_16(&instance->registers->usbcmd);
    229                 uhci_print_verbose("Command register: %X\n", reg);
     230                uhci_print_info("Command register: %X\n", reg);
    230231
    231232                reg = pio_read_16(&instance->registers->usbsts);
    232                 uhci_print_verbose("Status register: %X (%s,%s,%s,%s,%s,%s)\n",
     233                uhci_print_info("Status register: %X (%s,%s,%s,%s,%s,%s)\n",
    233234                    reg,
    234235                    UHCI_GET_STR_FLAG(reg, UHCI_STATUS_HALTED, "halted", "-"),
  • uspace/drv/uhci/uhci_struct/transfer_descriptor.c

    rb3258ad r4046c1ea  
    5252        uhci_print_verbose("Creating device field: %x.\n", instance->device);
    5353
    54         instance->buffer_ptr = (uintptr_t)addr_to_phys(buffer);
    55 
    56         uhci_print_verbose("Creating buffer field: %p(%p).\n",
    57           buffer, instance->buffer_ptr);
    58 
    5954        char buffer_dump[BUFFER_LEN];
    6055        buffer_to_str(buffer_dump, BUFFER_LEN, buffer, size);
    6156        uhci_print_verbose("Buffer dump (%zuB): %s.\n", size, buffer_dump);
    6257
     58        if (size) {
     59                instance->buffer_ptr = (uintptr_t)addr_to_phys(buffer);
     60
     61                uhci_print_verbose("Creating buffer field: %p(%p).\n",
     62                        buffer, instance->buffer_ptr);
     63        } else {
     64                instance->buffer_ptr = 0;
     65        }
     66
     67
    6368        instance->next_va = NULL;
    6469        instance->callback = NULL;
     70        uhci_print_info("Created a new TD.\n");
    6571}
    6672
     
    98104        callback_run(instance->callback,
    99105                convert_outcome(instance->status),
    100                 instance->status >> TD_STATUS_ACTLEN_POS & TD_STATUS_ACTLEN_MASK
     106                ((instance->status >> TD_STATUS_ACTLEN_POS) + 1) & TD_STATUS_ACTLEN_MASK
    101107        );
    102108}
Note: See TracChangeset for help on using the changeset viewer.