Changeset 79ae36dd in mainline for uspace/lib/usb/src/ddfiface.c


Ignore:
Timestamp:
2011-06-08T19:01:55Z (13 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0eff68e
Parents:
764d71e
Message:

new async framework with integrated exchange tracking

  • strict isolation between low-level IPC and high-level async framework with integrated exchange tracking
    • each IPC connection is represented by an async_sess_t structure
    • each IPC exchange is represented by an async_exch_t structure
    • exchange management is either based on atomic messages (EXCHANGE_ATOMIC), locking (EXCHANGE_SERIALIZE) or connection cloning (EXCHANGE_CLONE)
  • async_obsolete: temporary compatibility layer to keep old async clients working (several pieces of code are currently broken, but only non-essential functionality)
  • IPC_M_PHONE_HANGUP is now method no. 0 (for elegant boolean evaluation)
  • IPC_M_DEBUG_ALL has been renamed to IPC_M_DEBUG
  • IPC_M_PING has been removed (VFS protocol now has VFS_IN_PING)
  • console routines in libc have been rewritten for better abstraction
  • additional use for libc-private header files (FILE structure opaque to the client)
  • various cstyle changes (typos, indentation, missing externs in header files, improved comments, etc.)
File:
1 edited

Legend:

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

    r764d71e r79ae36dd  
    7878{
    7979        assert(fun != NULL);
    80 
    81         int parent_phone = devman_parent_device_connect(fun->handle,
     80       
     81        async_sess_t *parent_sess =
     82            devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle,
    8283            IPC_FLAG_BLOCKING);
    83         if (parent_phone < 0) {
    84                 return parent_phone;
    85         }
    86 
     84        if (!parent_sess)
     85                return ENOMEM;
     86       
     87        async_exch_t *exch = async_exchange_begin(parent_sess);
     88       
    8789        sysarg_t hc_handle;
    88         int rc = async_req_1_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
     90        int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
    8991            IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &hc_handle);
    90 
    91         async_hangup(parent_phone);
    92 
    93         if (rc != EOK) {
     92       
     93        async_exchange_end(exch);
     94        async_hangup(parent_sess);
     95       
     96        if (rc != EOK)
    9497                return rc;
    95         }
    96 
     98       
    9799        *handle = hc_handle;
    98 
    99100        return EOK;
    100101}
     
    128129{
    129130        assert(fun);
    130         int parent_phone = devman_parent_device_connect(fun->handle,
     131       
     132        async_sess_t *parent_sess =
     133            devman_parent_device_connect(EXCHANGE_SERIALIZE, fun->handle,
    131134            IPC_FLAG_BLOCKING);
    132         if (parent_phone < 0) {
    133                 return parent_phone;
    134         }
    135 
     135        if (!parent_sess)
     136                return ENOMEM;
     137       
     138        async_exch_t *exch = async_exchange_begin(parent_sess);
     139       
    136140        sysarg_t addr;
    137         int rc = async_req_2_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
     141        int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
    138142            IPC_M_USB_GET_ADDRESS, handle, &addr);
    139 
    140         async_hangup(parent_phone);
    141 
    142         if (rc != EOK) {
     143       
     144        async_exchange_end(exch);
     145        async_hangup(parent_sess);
     146       
     147        if (rc != EOK)
    143148                return rc;
    144         }
    145 
    146         if (address != NULL) {
     149       
     150        if (address != NULL)
    147151                *address = (usb_address_t) addr;
    148         }
    149 
     152       
    150153        return EOK;
    151154}
Note: See TracChangeset for help on using the changeset viewer.