Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/hc.c

    r79ae36dd re8f826b  
    8181
    8282        connection->hc_handle = hc_handle;
    83         connection->hc_sess = NULL;
     83        connection->hc_phone = -1;
    8484
    8585        return EOK;
     
    9494{
    9595        assert(connection);
    96        
    97         if (usb_hc_connection_is_opened(connection))
     96
     97        if (usb_hc_connection_is_opened(connection)) {
    9898                return EBUSY;
    99        
    100         async_sess_t *sess = devman_device_connect(EXCHANGE_SERIALIZE,
    101             connection->hc_handle, 0);
    102         if (!sess)
    103                 return ENOMEM;
    104        
    105         connection->hc_sess = sess;
     99        }
     100
     101        int phone = devman_device_connect(connection->hc_handle, 0);
     102        if (phone < 0) {
     103                return phone;
     104        }
     105
     106        connection->hc_phone = phone;
     107
    106108        return EOK;
    107109}
     
    115117{
    116118        assert(connection);
    117         return (connection->hc_sess != NULL);
     119
     120        return (connection->hc_phone >= 0);
    118121}
    119122
     
    131134        }
    132135
    133         int rc = async_hangup(connection->hc_sess);
    134         if (rc != EOK) {
    135                 return rc;
    136         }
    137 
    138         connection->hc_sess = NULL;
     136        int rc = async_hangup(connection->hc_phone);
     137        if (rc != EOK) {
     138                return rc;
     139        }
     140
     141        connection->hc_phone = -1;
    139142
    140143        return EOK;
     
    151154    usb_address_t address, devman_handle_t *handle)
    152155{
    153         if (!usb_hc_connection_is_opened(connection))
     156        if (!usb_hc_connection_is_opened(connection)) {
    154157                return ENOENT;
    155        
    156         async_exch_t *exch = async_exchange_begin(connection->hc_sess);
    157        
     158        }
     159
    158160        sysarg_t tmp;
    159         int rc = async_req_2_1(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
     161        int rc = async_req_2_1(connection->hc_phone,
     162            DEV_IFACE_ID(USBHC_DEV_IFACE),
    160163            IPC_M_USBHC_GET_HANDLE_BY_ADDRESS,
    161164            address, &tmp);
    162        
    163         async_exchange_end(exch);
    164        
    165         if ((rc == EOK) && (handle != NULL))
     165        if ((rc == EOK) && (handle != NULL)) {
    166166                *handle = tmp;
    167        
     167        }
     168
    168169        return rc;
    169170}
     
    176177usb_address_t usb_hc_get_address_by_handle(devman_handle_t dev_handle)
    177178{
    178         async_sess_t *parent_sess =
    179             devman_parent_device_connect(EXCHANGE_SERIALIZE, dev_handle,
     179        int parent_phone = devman_parent_device_connect(dev_handle,
    180180            IPC_FLAG_BLOCKING);
    181         if (!parent_sess)
    182                 return ENOMEM;
    183        
    184         async_exch_t *exch = async_exchange_begin(parent_sess);
    185        
     181        if (parent_phone < 0) {
     182                return parent_phone;
     183        }
     184
    186185        sysarg_t address;
    187         int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
     186
     187        int rc = async_req_2_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
    188188            IPC_M_USB_GET_ADDRESS,
    189189            dev_handle, &address);
    190        
    191         async_exchange_end(exch);
    192         async_hangup(parent_sess);
    193        
    194         if (rc != EOK)
    195                 return rc;
    196        
     190
     191        if (rc != EOK) {
     192                return rc;
     193        }
     194
     195        async_hangup(parent_phone);
     196
    197197        return (usb_address_t) address;
    198198}
     
    240240int usb_hc_find(devman_handle_t device_handle, devman_handle_t *hc_handle)
    241241{
    242         async_sess_t *parent_sess =
    243             devman_parent_device_connect(EXCHANGE_SERIALIZE, device_handle,
     242        int parent_phone = devman_parent_device_connect(device_handle,
    244243            IPC_FLAG_BLOCKING);
    245         if (!parent_sess)
    246                 return ENOMEM;
    247        
    248         async_exch_t *exch = async_exchange_begin(parent_sess);
    249        
     244        if (parent_phone < 0) {
     245                return parent_phone;
     246        }
     247
    250248        devman_handle_t h;
    251         int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
     249        int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
    252250            IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &h);
    253        
    254         async_exchange_end(exch);
    255         async_hangup(parent_sess);
    256        
    257         if (rc != EOK)
    258                 return rc;
    259        
    260         if (hc_handle != NULL)
     251
     252        async_hangup(parent_phone);
     253
     254        if (rc != EOK) {
     255                return rc;
     256        }
     257
     258        if (hc_handle != NULL) {
    261259                *hc_handle = h;
    262        
     260        }
     261
    263262        return EOK;
    264263}
Note: See TracChangeset for help on using the changeset viewer.