Ignore:
File:
1 edited

Legend:

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

    rc4ba29c7 rad104e0  
    4343typedef struct {
    4444        usb_direction_t direction;
    45         usb_hcd_transfer_callback_out_t out_callback;
    46         usb_hcd_transfer_callback_in_t in_callback;
    47         usb_hc_device_t *hc;
     45        usbhc_iface_transfer_out_callback_t out_callback;
     46        usbhc_iface_transfer_in_callback_t in_callback;
     47        device_t *dev;
    4848        void *arg;
    4949} transfer_info_t;
     
    5656        switch (transfer->direction) {
    5757                case USB_DIRECTION_IN:
    58                         transfer->in_callback(transfer->hc,
     58                        transfer->in_callback(transfer->dev,
    5959                            size, outcome,
    6060                            transfer->arg);
    6161                        break;
    6262                case USB_DIRECTION_OUT:
    63                         transfer->out_callback(transfer->hc,
     63                        transfer->out_callback(transfer->dev,
    6464                            outcome,
    6565                            transfer->arg);
     
    7373}
    7474
    75 static transfer_info_t *create_transfer_info(usb_hc_device_t *hc,
     75static transfer_info_t *create_transfer_info(device_t *dev,
    7676    usb_direction_t direction, void *arg)
    7777{
     
    8282        transfer->out_callback = NULL;
    8383        transfer->arg = arg;
    84         transfer->hc = hc;
     84        transfer->dev = dev;
    8585
    8686        return transfer;
    8787}
    8888
    89 static int enqueue_transfer_out(usb_hc_device_t *hc,
    90     usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint,
     89static int enqueue_transfer_out(device_t *dev,
     90    usb_target_t target, usb_transfer_type_t transfer_type,
    9191    void *buffer, size_t size,
    92     usb_hcd_transfer_callback_out_t callback, void *arg)
     92    usbhc_iface_transfer_out_callback_t callback, void *arg)
    9393{
    9494        printf(NAME ": transfer OUT [%d.%d (%s); %u]\n",
    95             dev->address, endpoint->endpoint,
    96             usb_str_transfer_type(endpoint->transfer_type),
     95            target.address, target.endpoint,
     96            usb_str_transfer_type(transfer_type),
    9797            size);
    9898
    9999        transfer_info_t *transfer
    100             = create_transfer_info(hc, USB_DIRECTION_OUT, arg);
     100            = create_transfer_info(dev, USB_DIRECTION_OUT, arg);
    101101        transfer->out_callback = callback;
    102 
    103         usb_target_t target = {
    104                 .address = dev->address,
    105                 .endpoint = endpoint->endpoint
    106         };
    107102
    108103        hc_add_transaction_to_device(false, target, buffer, size,
     
    112107}
    113108
    114 static int enqueue_transfer_setup(usb_hc_device_t *hc,
    115     usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint,
     109static int enqueue_transfer_setup(device_t *dev,
     110    usb_target_t target, usb_transfer_type_t transfer_type,
    116111    void *buffer, size_t size,
    117     usb_hcd_transfer_callback_out_t callback, void *arg)
     112    usbhc_iface_transfer_out_callback_t callback, void *arg)
    118113{
    119114        printf(NAME ": transfer SETUP [%d.%d (%s); %u]\n",
    120             dev->address, endpoint->endpoint,
    121             usb_str_transfer_type(endpoint->transfer_type),
     115            target.address, target.endpoint,
     116            usb_str_transfer_type(transfer_type),
    122117            size);
    123118
    124119        transfer_info_t *transfer
    125             = create_transfer_info(hc, USB_DIRECTION_OUT, arg);
     120            = create_transfer_info(dev, USB_DIRECTION_OUT, arg);
    126121        transfer->out_callback = callback;
    127 
    128         usb_target_t target = {
    129                 .address = dev->address,
    130                 .endpoint = endpoint->endpoint
    131         };
    132122
    133123        hc_add_transaction_to_device(true, target, buffer, size,
     
    137127}
    138128
    139 static int enqueue_transfer_in(usb_hc_device_t *hc,
    140     usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint,
     129static int enqueue_transfer_in(device_t *dev,
     130    usb_target_t target, usb_transfer_type_t transfer_type,
    141131    void *buffer, size_t size,
    142     usb_hcd_transfer_callback_in_t callback, void *arg)
     132    usbhc_iface_transfer_in_callback_t callback, void *arg)
    143133{
    144134        printf(NAME ": transfer IN [%d.%d (%s); %u]\n",
    145             dev->address, endpoint->endpoint,
    146             usb_str_transfer_type(endpoint->transfer_type),
     135            target.address, target.endpoint,
     136            usb_str_transfer_type(transfer_type),
    147137            size);
    148138
    149139        transfer_info_t *transfer
    150             = create_transfer_info(hc, USB_DIRECTION_IN, arg);
     140            = create_transfer_info(dev, USB_DIRECTION_IN, arg);
    151141        transfer->in_callback = callback;
    152 
    153         usb_target_t target = {
    154                 .address = dev->address,
    155                 .endpoint = endpoint->endpoint
    156         };
    157142
    158143        hc_add_transaction_from_device(target, buffer, size,
     
    163148
    164149
    165 usb_hcd_transfer_ops_t vhc_transfer_ops = {
    166         .transfer_out = enqueue_transfer_out,
    167         .transfer_in = enqueue_transfer_in,
    168         .transfer_setup = enqueue_transfer_setup
     150static int get_address(device_t *dev, devman_handle_t handle,
     151    usb_address_t *address)
     152{
     153        return ENOTSUP;
     154}
     155
     156static int interrupt_out(device_t *dev, usb_target_t target,
     157    void *data, size_t size,
     158    usbhc_iface_transfer_out_callback_t callback, void *arg)
     159{
     160        return enqueue_transfer_out(dev, target, USB_TRANSFER_INTERRUPT,
     161            data, size,
     162            callback, arg);
     163}
     164
     165static int interrupt_in(device_t *dev, usb_target_t target,
     166    void *data, size_t size,
     167    usbhc_iface_transfer_in_callback_t callback, void *arg)
     168{
     169        return enqueue_transfer_in(dev, target, USB_TRANSFER_INTERRUPT,
     170            data, size,
     171            callback, arg);
     172}
     173
     174static int control_write_setup(device_t *dev, usb_target_t target,
     175    void *data, size_t size,
     176    usbhc_iface_transfer_out_callback_t callback, void *arg)
     177{
     178        return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL,
     179            data, size,
     180            callback, arg);
     181}
     182
     183static int control_write_data(device_t *dev, usb_target_t target,
     184    void *data, size_t size,
     185    usbhc_iface_transfer_out_callback_t callback, void *arg)
     186{
     187        return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL,
     188            data, size,
     189            callback, arg);
     190}
     191
     192static int control_write_status(device_t *dev, usb_target_t target,
     193    usbhc_iface_transfer_in_callback_t callback, void *arg)
     194{
     195        return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL,
     196            NULL, 0,
     197            callback, arg);
     198}
     199
     200static int control_read_setup(device_t *dev, usb_target_t target,
     201    void *data, size_t size,
     202    usbhc_iface_transfer_out_callback_t callback, void *arg)
     203{
     204        return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL,
     205            data, size,
     206            callback, arg);
     207}
     208
     209static int control_read_data(device_t *dev, usb_target_t target,
     210    void *data, size_t size,
     211    usbhc_iface_transfer_in_callback_t callback, void *arg)
     212{
     213        return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL,
     214            data, size,
     215            callback, arg);
     216}
     217
     218static int control_read_status(device_t *dev, usb_target_t target,
     219    usbhc_iface_transfer_out_callback_t callback, void *arg)
     220{
     221        return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL,
     222            NULL, 0,
     223            callback, arg);
     224}
     225
     226
     227usbhc_iface_t vhc_iface = {
     228        .tell_address = get_address,
     229
     230        .reserve_default_address = reserve_default_address,
     231        .release_default_address = release_default_address,
     232        .request_address = request_address,
     233        .release_address = release_address,
     234
     235        .interrupt_out = interrupt_out,
     236        .interrupt_in = interrupt_in,
     237
     238        .control_write_setup = control_write_setup,
     239        .control_write_data = control_write_data,
     240        .control_write_status = control_write_status,
     241
     242        .control_read_setup = control_read_setup,
     243        .control_read_data = control_read_data,
     244        .control_read_status = control_read_status
    169245};
    170246
Note: See TracChangeset for help on using the changeset viewer.