Ignore:
File:
1 edited

Legend:

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

    rdaec5e04 r774afaae  
    2727 */
    2828
    29 /** @addtogroup drvusbvhc
     29/** @addtogroup usb
    3030 * @{
    3131 */
     
    3434 */
    3535
     36#include <ipc/ipc.h>
    3637#include <adt/list.h>
    3738#include <bool.h>
     
    5758/** Create virtual device.
    5859 *
     60 * @param address USB address.
    5961 * @param phone Callback phone.
    60  * @param id Device id.
    6162 * @return New device.
    62  * @retval NULL Out of memory.
     63 * @retval NULL Out of memory or address already occupied.
    6364 */
    64 virtdev_connection_t *virtdev_add_device(int phone, sysarg_t id)
     65virtdev_connection_t *virtdev_add_device(int phone)
    6566{
    6667        virtdev_connection_t *dev = (virtdev_connection_t *)
    6768            malloc(sizeof(virtdev_connection_t));
    68         if (dev == NULL) {
    69                 return NULL;
    70         }
    71 
    7269        dev->phone = phone;
    73         dev->id = id;
    7470        list_append(&dev->link, &devices);
    7571       
     
    7773       
    7874        return dev;
    79 }
    80 
    81 /** Find virtual device by id.
    82  *
    83  * @param id Device id.
    84  * @return Device with given id.
    85  * @retval NULL No such device.
    86  */
    87 virtdev_connection_t *virtdev_find(sysarg_t id)
    88 {
    89         link_t *pos;
    90         list_foreach(pos, &devices) {
    91                 virtdev_connection_t *dev
    92                     = list_get_instance(pos, virtdev_connection_t, link);
    93                 if (dev->id == id) {
    94                         return dev;
    95                 }
    96         }
    97 
    98         return NULL;
    9975}
    10076
     
    11288 * @param transaction Transaction to be sent over the bus.
    11389 */
    114 int virtdev_send_to_all(transaction_t *transaction)
     90usb_transaction_outcome_t virtdev_send_to_all(transaction_t *transaction)
    11591{
    116         /* For easier debugging. */
    117         switch (transaction->type) {
    118                 case USBVIRT_TRANSACTION_SETUP:
    119                 case USBVIRT_TRANSACTION_OUT:
    120                         transaction->actual_len = transaction->len;
    121                         break;
    122                 case USBVIRT_TRANSACTION_IN:
    123                         transaction->actual_len = 0;
    124                         break;
    125                 default:
    126                         assert(false && "unreachable branch in switch()");
    127         }
    128         int outcome = EBADCHECKSUM;
    129 
    13092        link_t *pos;
    13193        list_foreach(pos, &devices) {
     
    138100               
    139101                ipc_call_t answer_data;
    140                 sysarg_t answer_rc;
     102                ipcarg_t answer_rc;
    141103                aid_t req;
    142104                int rc = EOK;
     
    176138                } else {
    177139                        async_wait_for(req, &answer_rc);
    178                         transaction->actual_len = IPC_GET_ARG1(answer_data);
    179140                        rc = (int)answer_rc;
    180                 }
    181 
    182                 /*
    183                  * If at least one device was able to accept this
    184                  * transaction and process it, we can announce success.
    185                  */
    186                 if (rc == EOK) {
    187                         outcome = EOK;
    188141                }
    189142        }
     
    195148        if (virtual_hub_device.address == transaction->target.address) {
    196149                size_t tmp;
    197                 usb_log_debug2("Sending `%s' transaction to hub.\n",
     150                dprintf(1, "sending `%s' transaction to hub",
    198151                    usbvirt_str_transaction_type(transaction->type));
    199152                switch (transaction->type) {
     
    211164                                    transaction->buffer, transaction->len,
    212165                                    &tmp);
    213                                 transaction->actual_len = tmp;
     166                                if (tmp < transaction->len) {
     167                                        transaction->len = tmp;
     168                                }
    214169                                break;
    215170                               
     
    221176                                break;
    222177                }
    223                 outcome = EOK;
     178                dprintf(4, "transaction on hub processed...");
    224179        }
    225180       
     
    228183         * real-life image.
    229184         */
    230         return outcome;
     185        return USB_OUTCOME_OK;
    231186}
    232187
Note: See TracChangeset for help on using the changeset viewer.