Changeset 79ae36dd in mainline for uspace/lib/usbdev/src/hub.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/usbdev/src/hub.c

    r764d71e r79ae36dd  
    4242#include <usb/debug.h>
    4343#include <time.h>
     44#include <async.h>
    4445
    4546/** How much time to wait between attempts to register endpoint 0:0.
     
    7172{
    7273        CHECK_CONNECTION(connection);
    73 
     74       
     75        async_exch_t *exch = async_exchange_begin(connection->hc_sess);
     76       
    7477        sysarg_t address;
    75         int rc = async_req_2_1(connection->hc_phone,
    76             DEV_IFACE_ID(USBHC_DEV_IFACE),
     78        int rc = async_req_2_1(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
    7779            IPC_M_USBHC_REQUEST_ADDRESS, speed,
    7880            &address);
    79         if (rc != EOK) {
     81       
     82        async_exchange_end(exch);
     83       
     84        if (rc != EOK)
    8085                return (usb_address_t) rc;
    81         } else {
    82                 return (usb_address_t) address;
    83         }
     86       
     87        return (usb_address_t) address;
    8488}
    8589
     
    9498{
    9599        CHECK_CONNECTION(connection);
    96         if (attached_device == NULL) {
     100       
     101        if (attached_device == NULL)
    97102                return EBADMEM;
    98         }
    99 
    100         return async_req_3_0(connection->hc_phone,
    101             DEV_IFACE_ID(USBHC_DEV_IFACE),
     103       
     104        async_exch_t *exch = async_exchange_begin(connection->hc_sess);
     105        int rc = async_req_3_0(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
    102106            IPC_M_USBHC_BIND_ADDRESS,
    103107            attached_device->address, attached_device->handle);
     108        async_exchange_end(exch);
     109       
     110        return rc;
    104111}
    105112
     
    114121{
    115122        CHECK_CONNECTION(connection);
    116 
    117         return async_req_2_0(connection->hc_phone,
    118             DEV_IFACE_ID(USBHC_DEV_IFACE),
     123       
     124        async_exch_t *exch = async_exchange_begin(connection->hc_sess);
     125        int rc = async_req_2_0(exch, DEV_IFACE_ID(USBHC_DEV_IFACE),
    119126            IPC_M_USBHC_RELEASE_ADDRESS, address);
     127        async_exchange_end(exch);
     128       
     129        return rc;
    120130}
    121131
     
    192202        usb_hc_connection_t hc_conn = {
    193203                .hc_handle = connection->hc_handle,
    194                 .hc_phone = -1
     204                .hc_sess = NULL
    195205        };
    196206
Note: See TracChangeset for help on using the changeset viewer.