Ignore:
File:
1 edited

Legend:

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

    re913cc9 r79ae36dd  
     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
    129#include <errno.h>
    230#include <str_error.h>
     
    432#include <usbvirt/ipc.h>
    533#include "vhcd.h"
    6 
    7 #define list_foreach(pos, head) \
    8         for (pos = (head)->next; pos != (head); \
    9                 pos = pos->next)
    1034
    1135vhc_transfer_t *vhc_transfer_create(usb_address_t address, usb_endpoint_t ep,
     
    6791        fibril_mutex_lock(&vhc->guard);
    6892
    69         link_t *pos;
    7093        bool target_found = false;
    71         list_foreach(pos, &vhc->devices) {
     94        list_foreach(vhc->devices, pos) {
    7295                vhc_virtdev_t *dev = list_get_instance(pos, vhc_virtdev_t, link);
    7396                fibril_mutex_lock(&dev->guard);
     
    128151
    129152static int process_transfer_remote(vhc_transfer_t *transfer,
    130     int phone, size_t *actual_data_size)
     153    async_sess_t *sess, size_t *actual_data_size)
    131154{
    132155        int rc;
     
    134157        if (transfer->transfer_type == USB_TRANSFER_CONTROL) {
    135158                if (transfer->direction == USB_DIRECTION_IN) {
    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,
     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,
    149172                            transfer->transfer_type,
    150173                            transfer->data_buffer, transfer->data_buffer_size,
     
    152175                } else {
    153176                        assert(transfer->direction == USB_DIRECTION_OUT);
    154                         rc = usbvirt_ipc_send_data_out(phone, transfer->endpoint,
     177                        rc = usbvirt_ipc_send_data_out(sess, transfer->endpoint,
    155178                            transfer->transfer_type,
    156179                            transfer->data_buffer, transfer->data_buffer_size);
     
    211234                int rc = EOK;
    212235                size_t data_transfer_size = 0;
    213                 if (dev->dev_phone > 0) {
    214                         rc = process_transfer_remote(transfer, dev->dev_phone,
     236                if (dev->dev_sess) {
     237                        rc = process_transfer_remote(transfer, dev->dev_sess,
    215238                            &data_transfer_size);
    216239                } else if (dev->dev_local != NULL) {
Note: See TracChangeset for help on using the changeset viewer.