Changeset 357b5f5 in mainline for uspace/lib/c/generic/devman.c


Ignore:
Timestamp:
2011-01-23T20:09:13Z (13 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
fdb9982c
Parents:
cead2aa (diff), 7e36c8d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/devman.c

    rcead2aa r357b5f5  
    4242#include <devman.h>
    4343#include <async.h>
     44#include <fibril_synch.h>
    4445#include <errno.h>
    4546#include <malloc.h>
     
    5051static int devman_phone_client = -1;
    5152
     53static FIBRIL_MUTEX_INITIALIZE(devman_phone_mutex);
     54
    5255int devman_get_phone(devman_interface_t iface, unsigned int flags)
    5356{
    5457        switch (iface) {
    5558        case DEVMAN_DRIVER:
    56                 if (devman_phone_driver >= 0)
     59                fibril_mutex_lock(&devman_phone_mutex);
     60                if (devman_phone_driver >= 0) {
     61                        fibril_mutex_unlock(&devman_phone_mutex);
    5762                        return devman_phone_driver;
     63                }
    5864               
    5965                if (flags & IPC_FLAG_BLOCKING)
    60                         devman_phone_driver = ipc_connect_me_to_blocking(PHONE_NS,
     66                        devman_phone_driver = async_connect_me_to_blocking(
     67                            PHONE_NS, SERVICE_DEVMAN, DEVMAN_DRIVER, 0);
     68                else
     69                        devman_phone_driver = async_connect_me_to(PHONE_NS,
    6170                            SERVICE_DEVMAN, DEVMAN_DRIVER, 0);
    62                 else
    63                         devman_phone_driver = ipc_connect_me_to(PHONE_NS,
    64                             SERVICE_DEVMAN, DEVMAN_DRIVER, 0);
    65                
     71               
     72                fibril_mutex_unlock(&devman_phone_mutex);
    6673                return devman_phone_driver;
    6774        case DEVMAN_CLIENT:
    68                 if (devman_phone_client >= 0)
     75                fibril_mutex_lock(&devman_phone_mutex);
     76                if (devman_phone_client >= 0) {
     77                        fibril_mutex_unlock(&devman_phone_mutex);
    6978                        return devman_phone_client;
    70                
    71                 if (flags & IPC_FLAG_BLOCKING)
    72                         devman_phone_client = ipc_connect_me_to_blocking(PHONE_NS,
     79                }
     80               
     81                if (flags & IPC_FLAG_BLOCKING) {
     82                        devman_phone_client = async_connect_me_to_blocking(
     83                            PHONE_NS, SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
     84                } else {
     85                        devman_phone_client = async_connect_me_to(PHONE_NS,
    7386                            SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
    74                 else
    75                         devman_phone_client = ipc_connect_me_to(PHONE_NS,
    76                             SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
    77                
     87                }
     88               
     89                fibril_mutex_unlock(&devman_phone_mutex);
    7890                return devman_phone_client;
    7991        default:
     
    95107        aid_t req = async_send_2(phone, DEVMAN_DRIVER_REGISTER, 0, 0, &answer);
    96108       
    97         ipcarg_t retval = async_data_write_start(phone, name, str_size(name));
     109        sysarg_t retval = async_data_write_start(phone, name, str_size(name));
    98110        if (retval != EOK) {
    99111                async_wait_for(req, NULL);
     
    104116        async_set_client_connection(conn);
    105117       
    106         ipcarg_t callback_phonehash;
     118        sysarg_t callback_phonehash;
    107119        ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash);
    108120        async_wait_for(req, &retval);
     
    116128{
    117129        ipc_call_t answer;
    118         async_send_1(phone, DEVMAN_ADD_MATCH_ID, match_id->score, &answer);
     130        aid_t req = async_send_1(phone, DEVMAN_ADD_MATCH_ID, match_id->score, &answer);
    119131        int retval = async_data_write_start(phone, match_id->id, str_size(match_id->id));
    120         return retval; 
     132        async_wait_for(req, NULL);
     133        return retval;
    121134}
    122135
     
    154167        aid_t req = async_send_2(phone, DEVMAN_ADD_CHILD_DEVICE, parent_handle, match_count, &answer);
    155168
    156         ipcarg_t retval = async_data_write_start(phone, name, str_size(name));
     169        sysarg_t retval = async_data_write_start(phone, name, str_size(name));
    157170        if (retval != EOK) {
    158171                async_wait_for(req, NULL);
     
    191204        aid_t req = async_send_1(phone, DEVMAN_ADD_DEVICE_TO_CLASS, devman_handle, &answer);
    192205       
    193         ipcarg_t retval = async_data_write_start(phone, class_name, str_size(class_name));
     206        sysarg_t retval = async_data_write_start(phone, class_name, str_size(class_name));
    194207        if (retval != EOK) {
    195208                async_wait_for(req, NULL);
     
    229242       
    230243        if (flags & IPC_FLAG_BLOCKING) {
    231                 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,
     244                phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,
    232245                    DEVMAN_CONNECT_TO_DEVICE, handle);
    233246        } else {
    234                 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,
     247                phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN,
    235248                    DEVMAN_CONNECT_TO_DEVICE, handle);
    236249        }
     
    244257       
    245258        if (flags & IPC_FLAG_BLOCKING) {
    246                 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,
     259                phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,
    247260                    DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle);
    248261        } else {
    249                 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,
     262                phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN,
    250263                    DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle);
    251264        }
     
    267280            &answer);
    268281       
    269         ipcarg_t retval = async_data_write_start(phone, pathname, str_size(pathname));
     282        sysarg_t retval = async_data_write_start(phone, pathname, str_size(pathname));
    270283        if (retval != EOK) {
    271284                async_wait_for(req, NULL);
Note: See TracChangeset for help on using the changeset viewer.