Ignore:
File:
1 edited

Legend:

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

    re8f826b r79ae36dd  
    8181
    8282        connection->hc_handle = hc_handle;
    83         connection->hc_phone = -1;
     83        connection->hc_sess = NULL;
    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 
    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 
     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;
    108106        return EOK;
    109107}
     
    117115{
    118116        assert(connection);
    119 
    120         return (connection->hc_phone >= 0);
     117        return (connection->hc_sess != NULL);
    121118}
    122119
     
    134131        }
    135132
    136         int rc = async_hangup(connection->hc_phone);
     133        int rc = async_hangup(connection->hc_sess);
    137134        if (rc != EOK) {
    138135                return rc;
    139136        }
    140137
    141         connection->hc_phone = -1;
     138        connection->hc_sess = NULL;
    142139
    143140        return EOK;
     
    154151    usb_address_t address, devman_handle_t *handle)
    155152{
    156         if (!usb_hc_connection_is_opened(connection)) {
     153        if (!usb_hc_connection_is_opened(connection))
    157154                return ENOENT;
    158         }
    159 
     155       
     156        async_exch_t *exch = async_exchange_begin(connection->hc_sess);
     157       
    160158        sysarg_t tmp;
    161         int rc = async_req_2_1(connection->hc_phone,
    162             DEV_IFACE_ID(USBHC_DEV_IFACE),
     159        int rc = async_req_2_1(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
    163160            IPC_M_USBHC_GET_HANDLE_BY_ADDRESS,
    164161            address, &tmp);
    165         if ((rc == EOK) && (handle != NULL)) {
     162       
     163        async_exchange_end(exch);
     164       
     165        if ((rc == EOK) && (handle != NULL))
    166166                *handle = tmp;
    167         }
    168 
     167       
    169168        return rc;
    170169}
     
    177176usb_address_t usb_hc_get_address_by_handle(devman_handle_t dev_handle)
    178177{
    179         int parent_phone = devman_parent_device_connect(dev_handle,
     178        async_sess_t *parent_sess =
     179            devman_parent_device_connect(EXCHANGE_SERIALIZE, dev_handle,
    180180            IPC_FLAG_BLOCKING);
    181         if (parent_phone < 0) {
    182                 return parent_phone;
    183         }
    184 
     181        if (!parent_sess)
     182                return ENOMEM;
     183       
     184        async_exch_t *exch = async_exchange_begin(parent_sess);
     185       
    185186        sysarg_t address;
    186 
    187         int rc = async_req_2_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
     187        int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
    188188            IPC_M_USB_GET_ADDRESS,
    189189            dev_handle, &address);
    190 
    191         if (rc != EOK) {
    192                 return rc;
    193         }
    194 
    195         async_hangup(parent_phone);
    196 
     190       
     191        async_exchange_end(exch);
     192        async_hangup(parent_sess);
     193       
     194        if (rc != EOK)
     195                return rc;
     196       
    197197        return (usb_address_t) address;
    198198}
     
    240240int usb_hc_find(devman_handle_t device_handle, devman_handle_t *hc_handle)
    241241{
    242         int parent_phone = devman_parent_device_connect(device_handle,
     242        async_sess_t *parent_sess =
     243            devman_parent_device_connect(EXCHANGE_SERIALIZE, device_handle,
    243244            IPC_FLAG_BLOCKING);
    244         if (parent_phone < 0) {
    245                 return parent_phone;
    246         }
    247 
     245        if (!parent_sess)
     246                return ENOMEM;
     247       
     248        async_exch_t *exch = async_exchange_begin(parent_sess);
     249       
    248250        devman_handle_t h;
    249         int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
     251        int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
    250252            IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &h);
    251 
    252         async_hangup(parent_phone);
    253 
    254         if (rc != EOK) {
    255                 return rc;
    256         }
    257 
    258         if (hc_handle != NULL) {
     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)
    259261                *hc_handle = h;
    260         }
    261 
     262       
    262263        return EOK;
    263264}
Note: See TracChangeset for help on using the changeset viewer.