Ignore:
File:
1 edited

Legend:

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

    r2cc6e97 ra19a2d7  
    6363        }
    6464
    65         usb_log_debug("%s %d:%d %zu(%zu).\n",
    66             name, target.address, target.endpoint, size, ep->max_packet_size);
    67 
    6865        const size_t bw = bandwidth_count_usb11(
    6966            ep->speed, ep->transfer_type, size, ep->max_packet_size);
     
    7168                usb_log_error("Endpoint(%d:%d) %s needs %zu bw "
    7269                    "but only %zu is reserved.\n",
    73                     target.address, target.endpoint, name, bw, res_bw);
     70                    name, target.address, target.endpoint, bw, res_bw);
    7471                return ENOSPC;
    7572        }
     73        usb_log_debug("%s %d:%d %zu(%zu).\n",
     74            name, target.address, target.endpoint, size, ep->max_packet_size);
    7675
    7776        *batch = batch_get(
     
    147146        hc_t *hc = fun_to_hc(fun);
    148147        assert(hc);
    149         const size_t size = max_packet_size;
    150148        usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, address);
    151149        if (speed >= USB_SPEED_MAX) {
    152150                speed = ep_speed;
    153151        }
     152        const size_t size =
     153            (transfer_type == USB_TRANSFER_INTERRUPT
     154            || transfer_type == USB_TRANSFER_ISOCHRONOUS) ?
     155            max_packet_size : 0;
     156        int ret;
     157
     158        endpoint_t *ep = malloc(sizeof(endpoint_t));
     159        if (ep == NULL)
     160                return ENOMEM;
     161        ret = endpoint_init(ep, address, endpoint, direction,
     162            transfer_type, speed, max_packet_size);
     163        if (ret != EOK) {
     164                free(ep);
     165                return ret;
     166        }
     167
    154168        usb_log_debug("Register endpoint %d:%d %s %s(%d) %zu(%zu) %u.\n",
    155169            address, endpoint, usb_str_transfer_type(transfer_type),
    156170            usb_str_speed(speed), direction, size, max_packet_size, interval);
    157171
    158         return usb_endpoint_manager_add_ep(&hc->ep_manager, address, endpoint,
    159             direction, transfer_type, speed, max_packet_size, size);
     172        ret = usb_endpoint_manager_register_ep(&hc->ep_manager, ep, size);
     173        if (ret != EOK) {
     174                endpoint_destroy(ep);
     175        }
     176        return ret;
    160177}
    161178/*----------------------------------------------------------------------------*/
     
    195212        ret = hc_schedule(hc, batch);
    196213        if (ret != EOK) {
    197                 usb_transfer_batch_dispose(batch);
     214                batch_dispose(batch);
    198215        }
    199216        return ret;
     
    223240        ret = hc_schedule(hc, batch);
    224241        if (ret != EOK) {
    225                 usb_transfer_batch_dispose(batch);
     242                batch_dispose(batch);
    226243        }
    227244        return ret;
     
    251268        ret = hc_schedule(hc, batch);
    252269        if (ret != EOK) {
    253                 usb_transfer_batch_dispose(batch);
     270                batch_dispose(batch);
    254271        }
    255272        return ret;
     
    279296        ret = hc_schedule(hc, batch);
    280297        if (ret != EOK) {
    281                 usb_transfer_batch_dispose(batch);
     298                batch_dispose(batch);
    282299        }
    283300        return ret;
     
    312329        ret = hc_schedule(hc, batch);
    313330        if (ret != EOK) {
    314                 usb_transfer_batch_dispose(batch);
     331                batch_dispose(batch);
    315332        }
    316333        return ret;
     
    344361        ret = hc_schedule(hc, batch);
    345362        if (ret != EOK) {
    346                 usb_transfer_batch_dispose(batch);
     363                batch_dispose(batch);
    347364        }
    348365        return ret;
Note: See TracChangeset for help on using the changeset viewer.