Ignore:
File:
1 edited

Legend:

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

    rea993d18 r4c28d17  
    6666static int hc_interrupt_emulator(void *arg);
    6767static int hc_debug_checker(void *arg);
     68#if 0
     69static bool usb_is_allowed(
     70    bool low_speed, usb_transfer_type_t transfer, size_t size);
     71#endif
    6872/*----------------------------------------------------------------------------*/
    6973/** Initialize UHCI hcd driver structure
     
    8589        int ret;
    8690
    87 #define CHECK_RET_RETURN(ret, message...) \
     91#define CHECK_RET_DEST_FUN_RETURN(ret, message...) \
    8892        if (ret != EOK) { \
    8993                usb_log_error(message); \
     94                if (instance->ddf_instance) \
     95                        ddf_fun_destroy(instance->ddf_instance); \
    9096                return ret; \
    9197        } else (void) 0
     
    9399        instance->hw_interrupts = interrupts;
    94100        instance->hw_failures = 0;
     101
     102        /* Setup UHCI function. */
     103        instance->ddf_instance = fun;
    95104
    96105        /* allow access to hc control registers */
    97106        regs_t *io;
    98107        ret = pio_enable(regs, reg_size, (void**)&io);
    99         CHECK_RET_RETURN(ret,
     108        CHECK_RET_DEST_FUN_RETURN(ret,
    100109            "Failed(%d) to gain access to registers at %p: %s.\n",
    101             ret, io, str_error(ret));
     110            ret, str_error(ret), io);
    102111        instance->registers = io;
    103112        usb_log_debug("Device registers at %p(%u) accessible.\n",
     
    105114
    106115        ret = hc_init_mem_structures(instance);
    107         CHECK_RET_RETURN(ret,
    108             "Failed(%d) to initialize UHCI memory structures: %s.\n",
    109             ret, str_error(ret));
     116        CHECK_RET_DEST_FUN_RETURN(ret,
     117            "Failed to initialize UHCI memory structures.\n");
    110118
    111119        hc_init_hw(instance);
    112120        if (!interrupts) {
    113                 instance->interrupt_emulator =
     121                instance->cleaner =
    114122                    fibril_create(hc_interrupt_emulator, instance);
    115                 fibril_add_ready(instance->interrupt_emulator);
    116         }
    117         (void)hc_debug_checker;
     123                fibril_add_ready(instance->cleaner);
     124        } else {
     125                /* TODO: enable interrupts here */
     126        }
     127
     128        instance->debug_checker =
     129            fibril_create(hc_debug_checker, instance);
     130//      fibril_add_ready(instance->debug_checker);
    118131
    119132        return EOK;
     
    215228        /* Set all frames to point to the first queue head */
    216229        const uint32_t queue =
    217             LINK_POINTER_QH(addr_to_phys(
    218                 instance->transfers_interrupt.queue_head));
     230          instance->transfers_interrupt.queue_head_pa
     231          | LINK_POINTER_QUEUE_HEAD_FLAG;
    219232
    220233        unsigned i = 0;
     
    223236        }
    224237
    225         /* Init device keeper */
     238        /* Init device keeper*/
    226239        usb_device_keeper_init(&instance->manager);
    227240        usb_log_debug("Initialized device manager.\n");
     
    316329
    317330        transfer_list_t *list =
    318             instance->transfers[batch->ep->speed][batch->ep->transfer_type];
     331            instance->transfers[batch->speed][batch->transfer_type];
    319332        assert(list);
    320333        transfer_list_add_batch(list, batch);
     
    466479#undef QH
    467480}
     481/*----------------------------------------------------------------------------*/
     482/** Check transfers for USB validity
     483 *
     484 * @param[in] low_speed Transfer speed.
     485 * @param[in] transfer Transer type
     486 * @param[in] size Size of data packets
     487 * @return True if transaction is allowed by USB specs, false otherwise
     488 */
     489#if 0
     490bool usb_is_allowed(
     491    bool low_speed, usb_transfer_type_t transfer, size_t size)
     492{
     493        /* see USB specification chapter 5.5-5.8 for magic numbers used here */
     494        switch(transfer)
     495        {
     496        case USB_TRANSFER_ISOCHRONOUS:
     497                return (!low_speed && size < 1024);
     498        case USB_TRANSFER_INTERRUPT:
     499                return size <= (low_speed ? 8 : 64);
     500        case USB_TRANSFER_CONTROL: /* device specifies its own max size */
     501                return (size <= (low_speed ? 8 : 64));
     502        case USB_TRANSFER_BULK: /* device specifies its own max size */
     503                return (!low_speed && size <= 64);
     504        }
     505        return false;
     506}
     507#endif
    468508/**
    469509 * @}
Note: See TracChangeset for help on using the changeset viewer.