Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/vhc/connhost.c

    r357a302 r46e078a  
    4848        usbhc_iface_transfer_out_callback_t out_callback;
    4949        usbhc_iface_transfer_in_callback_t in_callback;
    50         device_t *dev;
     50        ddf_fun_t *fun;
    5151        size_t reported_size;
    5252        void *arg;
     
    5858        usbhc_iface_transfer_out_callback_t out_callback;
    5959        usbhc_iface_transfer_in_callback_t in_callback;
    60         device_t *dev;
     60        ddf_fun_t *fun;
    6161        void *arg;
    6262        void *data_buffer;
     
    7575        switch (transfer->direction) {
    7676                case USB_DIRECTION_IN:
    77                         transfer->in_callback(transfer->dev,
     77                        transfer->in_callback(transfer->fun,
    7878                            outcome, size,
    7979                            transfer->arg);
    8080                        break;
    8181                case USB_DIRECTION_OUT:
    82                         transfer->out_callback(transfer->dev,
     82                        transfer->out_callback(transfer->fun,
    8383                            outcome,
    8484                            transfer->arg);
     
    9292}
    9393
    94 static transfer_info_t *create_transfer_info(device_t *dev,
     94static transfer_info_t *create_transfer_info(ddf_fun_t *fun,
    9595    usb_direction_t direction, void *arg)
    9696{
     
    101101        transfer->out_callback = NULL;
    102102        transfer->arg = arg;
    103         transfer->dev = dev;
     103        transfer->fun = fun;
    104104        transfer->reported_size = (size_t) -1;
    105105
     
    112112        switch (transfer->direction) {
    113113                case USB_DIRECTION_IN:
    114                         transfer->in_callback(transfer->dev,
     114                        transfer->in_callback(transfer->fun,
    115115                            outcome, size,
    116116                            transfer->arg);
    117117                        break;
    118118                case USB_DIRECTION_OUT:
    119                         transfer->out_callback(transfer->dev,
     119                        transfer->out_callback(transfer->fun,
    120120                            outcome,
    121121                            transfer->arg);
     
    138138        }
    139139
    140         transfer_info_t *transfer  = create_transfer_info(ctrl_transfer->dev,
     140        transfer_info_t *transfer  = create_transfer_info(ctrl_transfer->fun,
    141141            ctrl_transfer->direction, ctrl_transfer->arg);
    142142        transfer->out_callback = ctrl_transfer->out_callback;
     
    195195}
    196196
    197 static control_transfer_info_t *create_control_transfer_info(device_t *dev,
     197static control_transfer_info_t *create_control_transfer_info(ddf_fun_t *fun,
    198198    usb_direction_t direction, usb_target_t target,
    199199    void *data_buffer, size_t data_buffer_size,
     
    208208        transfer->out_callback = NULL;
    209209        transfer->arg = arg;
    210         transfer->dev = dev;
     210        transfer->fun = fun;
    211211        transfer->data_buffer = data_buffer;
    212212        transfer->data_buffer_size = data_buffer_size;
     
    215215}
    216216
    217 static int enqueue_transfer_out(device_t *dev,
     217static int enqueue_transfer_out(ddf_fun_t *fun,
    218218    usb_target_t target, usb_transfer_type_t transfer_type,
    219219    void *buffer, size_t size,
     
    226226
    227227        transfer_info_t *transfer
    228             = create_transfer_info(dev, USB_DIRECTION_OUT, arg);
     228            = create_transfer_info(fun, USB_DIRECTION_OUT, arg);
    229229        transfer->out_callback = callback;
    230230
     
    235235}
    236236
    237 static int enqueue_transfer_in(device_t *dev,
     237static int enqueue_transfer_in(ddf_fun_t *fun,
    238238    usb_target_t target, usb_transfer_type_t transfer_type,
    239239    void *buffer, size_t size,
     
    246246
    247247        transfer_info_t *transfer
    248             = create_transfer_info(dev, USB_DIRECTION_IN, arg);
     248            = create_transfer_info(fun, USB_DIRECTION_IN, arg);
    249249        transfer->in_callback = callback;
    250250
     
    256256
    257257
    258 static int interrupt_out(device_t *dev, usb_target_t target,
    259     size_t max_packet_size,
     258static int interrupt_out(ddf_fun_t *fun, usb_target_t target,
    260259    void *data, size_t size,
    261260    usbhc_iface_transfer_out_callback_t callback, void *arg)
    262261{
    263         return enqueue_transfer_out(dev, target, USB_TRANSFER_INTERRUPT,
     262        return enqueue_transfer_out(fun, target, USB_TRANSFER_INTERRUPT,
    264263            data, size,
    265264            callback, arg);
    266265}
    267266
    268 static int interrupt_in(device_t *dev, usb_target_t target,
    269     size_t max_packet_size,
     267static int interrupt_in(ddf_fun_t *fun, usb_target_t target,
    270268    void *data, size_t size,
    271269    usbhc_iface_transfer_in_callback_t callback, void *arg)
    272270{
    273         return enqueue_transfer_in(dev, target, USB_TRANSFER_INTERRUPT,
     271        return enqueue_transfer_in(fun, target, USB_TRANSFER_INTERRUPT,
    274272            data, size,
    275273            callback, arg);
    276274}
    277275
    278 static int control_write(device_t *dev, usb_target_t target,
    279     size_t max_packet_size,
     276static int control_write(ddf_fun_t *fun, usb_target_t target,
    280277    void *setup_packet, size_t setup_packet_size,
    281278    void *data, size_t data_size,
     
    283280{
    284281        control_transfer_info_t *transfer
    285             = create_control_transfer_info(dev, USB_DIRECTION_OUT, target,
     282            = create_control_transfer_info(fun, USB_DIRECTION_OUT, target,
    286283            data, data_size, arg);
    287284        transfer->out_callback = callback;
     
    294291}
    295292
    296 static int control_read(device_t *dev, usb_target_t target,
    297     size_t max_packet_size,
     293static int control_read(ddf_fun_t *fun, usb_target_t target,
    298294    void *setup_packet, size_t setup_packet_size,
    299295    void *data, size_t data_size,
     
    301297{
    302298        control_transfer_info_t *transfer
    303             = create_control_transfer_info(dev, USB_DIRECTION_IN, target,
     299            = create_control_transfer_info(fun, USB_DIRECTION_IN, target,
    304300            data, data_size, arg);
    305301        transfer->in_callback = callback;
     
    314310static usb_address_keeping_t addresses;
    315311
    316 static int tell_address(device_t *dev, devman_handle_t handle,
     312static int tell_address(ddf_fun_t *fun, devman_handle_t handle,
    317313    usb_address_t *address)
    318314{
     315        usb_log_debug("tell_address(fun \"%s\", handle %zu)\n",
     316            fun->name, (size_t) fun->handle);
    319317        usb_address_t addr = usb_address_keeping_find(&addresses, handle);
    320318        if (addr < 0) {
     
    326324}
    327325
    328 static int reserve_default_address(device_t *dev, usb_speed_t ignored)
    329 {
    330         usb_address_keeping_reserve_default(&addresses);
    331         return EOK;
    332 }
    333 
    334 static int release_default_address(device_t *dev)
    335 {
    336         usb_address_keeping_release_default(&addresses);
    337         return EOK;
    338 }
    339 
    340 static int request_address(device_t *dev, usb_speed_t ignored,
     326static int request_address(ddf_fun_t *fun, usb_speed_t ignored,
    341327    usb_address_t *address)
    342328{
     
    350336}
    351337
    352 static int release_address(device_t *dev, usb_address_t address)
     338static int release_address(ddf_fun_t *fun, usb_address_t address)
    353339{
    354340        return usb_address_keeping_release(&addresses, address);
    355341}
    356342
    357 static int bind_address(device_t *dev, usb_address_t address,
     343static int bind_address(ddf_fun_t *fun, usb_address_t address,
    358344    devman_handle_t handle)
    359345{
     
    362348}
    363349
     350static int usb_iface_get_hc_handle_rh_impl(ddf_fun_t *root_hub_fun,
     351    devman_handle_t *handle)
     352{
     353        ddf_fun_t *hc_fun = root_hub_fun->driver_data;
     354        assert(hc_fun != NULL);
     355
     356        *handle = hc_fun->handle;
     357
     358        usb_log_debug("usb_iface_get_hc_handle_rh_impl returns %zu\n", *handle);
     359
     360        return EOK;
     361}
     362
     363static int tell_address_rh(ddf_fun_t *root_hub_fun, devman_handle_t handle,
     364    usb_address_t *address)
     365{
     366        ddf_fun_t *hc_fun = root_hub_fun->driver_data;
     367        assert(hc_fun != NULL);
     368
     369        return tell_address(hc_fun, root_hub_fun->handle, address);
     370}
     371
    364372void address_init(void)
    365373{
     
    368376
    369377usbhc_iface_t vhc_iface = {
    370         .reserve_default_address = reserve_default_address,
    371         .release_default_address = release_default_address,
    372378        .request_address = request_address,
    373379        .bind_address = bind_address,
     
    386392};
    387393
     394usb_iface_t rh_usb_iface = {
     395        .get_hc_handle = usb_iface_get_hc_handle_rh_impl,
     396        .get_address = tell_address_rh
     397};
     398
    388399
    389400/**
Note: See TracChangeset for help on using the changeset viewer.