Ignore:
File:
1 edited

Legend:

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

    r79ae36dd re913cc9  
    1 /*
    2  * Copyright (c) 2011 Vojtech Horky
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  *
    9  * - Redistributions of source code must retain the above copyright
    10  *   notice, this list of conditions and the following disclaimer.
    11  * - Redistributions in binary form must reproduce the above copyright
    12  *   notice, this list of conditions and the following disclaimer in the
    13  *   documentation and/or other materials provided with the distribution.
    14  * - The name of the author may not be used to endorse or promote products
    15  *   derived from this software without specific prior written permission.
    16  *
    17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    20  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    27  */
    28 
    291#include <errno.h>
    302#include <str_error.h>
     
    324#include <usbvirt/ipc.h>
    335#include "vhcd.h"
     6
     7#define list_foreach(pos, head) \
     8        for (pos = (head)->next; pos != (head); \
     9                pos = pos->next)
    3410
    3511vhc_transfer_t *vhc_transfer_create(usb_address_t address, usb_endpoint_t ep,
     
    9167        fibril_mutex_lock(&vhc->guard);
    9268
     69        link_t *pos;
    9370        bool target_found = false;
    94         list_foreach(vhc->devices, pos) {
     71        list_foreach(pos, &vhc->devices) {
    9572                vhc_virtdev_t *dev = list_get_instance(pos, vhc_virtdev_t, link);
    9673                fibril_mutex_lock(&dev->guard);
     
    151128
    152129static int process_transfer_remote(vhc_transfer_t *transfer,
    153     async_sess_t *sess, size_t *actual_data_size)
     130    int phone, size_t *actual_data_size)
    154131{
    155132        int rc;
     
    157134        if (transfer->transfer_type == USB_TRANSFER_CONTROL) {
    158135                if (transfer->direction == USB_DIRECTION_IN) {
    159                         rc = usbvirt_ipc_send_control_read(sess,
    160                             transfer->setup_buffer, transfer->setup_buffer_size,
    161                             transfer->data_buffer, transfer->data_buffer_size,
    162                             actual_data_size);
    163                 } else {
    164                         assert(transfer->direction == USB_DIRECTION_OUT);
    165                         rc = usbvirt_ipc_send_control_write(sess,
    166                             transfer->setup_buffer, transfer->setup_buffer_size,
    167                             transfer->data_buffer, transfer->data_buffer_size);
    168                 }
    169         } else {
    170                 if (transfer->direction == USB_DIRECTION_IN) {
    171                         rc = usbvirt_ipc_send_data_in(sess, transfer->endpoint,
     136                        rc = usbvirt_ipc_send_control_read(phone,
     137                            transfer->setup_buffer, transfer->setup_buffer_size,
     138                            transfer->data_buffer, transfer->data_buffer_size,
     139                            actual_data_size);
     140                } else {
     141                        assert(transfer->direction == USB_DIRECTION_OUT);
     142                        rc = usbvirt_ipc_send_control_write(phone,
     143                            transfer->setup_buffer, transfer->setup_buffer_size,
     144                            transfer->data_buffer, transfer->data_buffer_size);
     145                }
     146        } else {
     147                if (transfer->direction == USB_DIRECTION_IN) {
     148                        rc = usbvirt_ipc_send_data_in(phone, transfer->endpoint,
    172149                            transfer->transfer_type,
    173150                            transfer->data_buffer, transfer->data_buffer_size,
     
    175152                } else {
    176153                        assert(transfer->direction == USB_DIRECTION_OUT);
    177                         rc = usbvirt_ipc_send_data_out(sess, transfer->endpoint,
     154                        rc = usbvirt_ipc_send_data_out(phone, transfer->endpoint,
    178155                            transfer->transfer_type,
    179156                            transfer->data_buffer, transfer->data_buffer_size);
     
    234211                int rc = EOK;
    235212                size_t data_transfer_size = 0;
    236                 if (dev->dev_sess) {
    237                         rc = process_transfer_remote(transfer, dev->dev_sess,
     213                if (dev->dev_phone > 0) {
     214                        rc = process_transfer_remote(transfer, dev->dev_phone,
    238215                            &data_transfer_size);
    239216                } else if (dev->dev_local != NULL) {
Note: See TracChangeset for help on using the changeset viewer.