Ignore:
File:
1 edited

Legend:

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

    r391d55b r1585c7e  
    6666static int hc_interrupt_emulator(void *arg);
    6767static int hc_debug_checker(void *arg);
    68 #if 0
     68
    6969static bool usb_is_allowed(
    7070    bool low_speed, usb_transfer_type_t transfer, size_t size);
    71 #endif
    7271/*----------------------------------------------------------------------------*/
    7372/** Initialize UHCI hcd driver structure
     
    239238        usb_device_keeper_init(&instance->manager);
    240239        usb_log_debug("Initialized device manager.\n");
    241 
    242         ret =
    243             usb_endpoint_manager_init(&instance->ep_manager,
    244                 BANDWIDTH_AVAILABLE_USB11);
    245         assert(ret == EOK);
    246240
    247241        return EOK;
     
    328322        assert(instance);
    329323        assert(batch);
     324        const int low_speed = (batch->speed == USB_SPEED_LOW);
     325        if (!usb_is_allowed(
     326            low_speed, batch->transfer_type, batch->max_packet_size)) {
     327                usb_log_warning(
     328                    "Invalid USB transfer specified %s SPEED %d %zu.\n",
     329                    low_speed ? "LOW" : "FULL" , batch->transfer_type,
     330                    batch->max_packet_size);
     331                return ENOTSUP;
     332        }
     333        /* TODO: check available bandwidth here */
    330334
    331335        transfer_list_t *list =
     
    334338        if (batch->transfer_type == USB_TRANSFER_CONTROL) {
    335339                usb_device_keeper_use_control(
    336                     &instance->manager, batch->target);
     340                    &instance->manager, batch->target.address);
    337341        }
    338342        transfer_list_add_batch(list, batch);
     
    354358{
    355359        assert(instance);
    356 //      status |= 1; //Uncomment to work around qemu hang
    357360        /* TODO: Resume interrupts are not supported */
    358361        /* Lower 2 bits are transaction error and transaction complete */
     
    373376                        usb_transfer_batch_t *batch =
    374377                            list_get_instance(item, usb_transfer_batch_t, link);
    375                         switch (batch->transfer_type)
    376                         {
    377                         case USB_TRANSFER_CONTROL:
     378                        if (batch->transfer_type == USB_TRANSFER_CONTROL) {
    378379                                usb_device_keeper_release_control(
    379                                     &instance->manager, batch->target);
    380                                 break;
    381                         case USB_TRANSFER_INTERRUPT:
    382                         case USB_TRANSFER_ISOCHRONOUS: {
    383 /*
    384                                 int ret = bandwidth_free(&instance->bandwidth,
    385                                     batch->target.address,
    386                                     batch->target.endpoint,
    387                                     batch->direction);
    388                                 if (ret != EOK)
    389                                         usb_log_warning("Failed(%d) to free "
    390                                             "reserved bw: %s.\n", ret,
    391                                             str_error(ret));
    392 */
    393                                 }
    394                         default:
    395                                 break;
     380                                    &instance->manager, batch->target.address);
    396381                        }
    397382                        batch->next_step(batch);
     
    514499 * @return True if transaction is allowed by USB specs, false otherwise
    515500 */
    516 #if 0
    517501bool usb_is_allowed(
    518502    bool low_speed, usb_transfer_type_t transfer, size_t size)
     
    532516        return false;
    533517}
    534 #endif
    535518/**
    536519 * @}
Note: See TracChangeset for help on using the changeset viewer.