Changeset 357b5f5 in mainline for uspace/lib/c/generic/devman.c
- Timestamp:
- 2011-01-23T20:09:13Z (13 years ago)
- 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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/devman.c
rcead2aa r357b5f5 42 42 #include <devman.h> 43 43 #include <async.h> 44 #include <fibril_synch.h> 44 45 #include <errno.h> 45 46 #include <malloc.h> … … 50 51 static int devman_phone_client = -1; 51 52 53 static FIBRIL_MUTEX_INITIALIZE(devman_phone_mutex); 54 52 55 int devman_get_phone(devman_interface_t iface, unsigned int flags) 53 56 { 54 57 switch (iface) { 55 58 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); 57 62 return devman_phone_driver; 63 } 58 64 59 65 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, 61 70 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); 66 73 return devman_phone_driver; 67 74 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); 69 78 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, 73 86 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); 78 90 return devman_phone_client; 79 91 default: … … 95 107 aid_t req = async_send_2(phone, DEVMAN_DRIVER_REGISTER, 0, 0, &answer); 96 108 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)); 98 110 if (retval != EOK) { 99 111 async_wait_for(req, NULL); … … 104 116 async_set_client_connection(conn); 105 117 106 ipcarg_t callback_phonehash;118 sysarg_t callback_phonehash; 107 119 ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash); 108 120 async_wait_for(req, &retval); … … 116 128 { 117 129 ipc_call_t answer; 118 a sync_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); 119 131 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; 121 134 } 122 135 … … 154 167 aid_t req = async_send_2(phone, DEVMAN_ADD_CHILD_DEVICE, parent_handle, match_count, &answer); 155 168 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)); 157 170 if (retval != EOK) { 158 171 async_wait_for(req, NULL); … … 191 204 aid_t req = async_send_1(phone, DEVMAN_ADD_DEVICE_TO_CLASS, devman_handle, &answer); 192 205 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)); 194 207 if (retval != EOK) { 195 208 async_wait_for(req, NULL); … … 229 242 230 243 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, 232 245 DEVMAN_CONNECT_TO_DEVICE, handle); 233 246 } else { 234 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,247 phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN, 235 248 DEVMAN_CONNECT_TO_DEVICE, handle); 236 249 } … … 244 257 245 258 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, 247 260 DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle); 248 261 } else { 249 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,262 phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN, 250 263 DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle); 251 264 } … … 267 280 &answer); 268 281 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)); 270 283 if (retval != EOK) { 271 284 async_wait_for(req, NULL);
Note:
See TracChangeset
for help on using the changeset viewer.