Changes in uspace/lib/c/generic/devman.c [0b5a4131:64d2b10] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/devman.c
r0b5a4131 r64d2b10 28 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 29 */ 30 31 30 31 /** @addtogroup libc 32 32 * @{ 33 33 */ … … 37 37 #include <str.h> 38 38 #include <stdio.h> 39 #include <ipc/ipc.h>40 39 #include <ipc/services.h> 41 40 #include <ipc/devman.h> 42 41 #include <devman.h> 43 42 #include <async.h> 43 #include <fibril_synch.h> 44 44 #include <errno.h> 45 45 #include <malloc.h> … … 50 50 static int devman_phone_client = -1; 51 51 52 static FIBRIL_MUTEX_INITIALIZE(devman_phone_mutex); 53 52 54 int devman_get_phone(devman_interface_t iface, unsigned int flags) 53 55 { 54 56 switch (iface) { 55 57 case DEVMAN_DRIVER: 56 if (devman_phone_driver >= 0) 58 fibril_mutex_lock(&devman_phone_mutex); 59 if (devman_phone_driver >= 0) { 60 fibril_mutex_unlock(&devman_phone_mutex); 57 61 return devman_phone_driver; 62 } 58 63 59 64 if (flags & IPC_FLAG_BLOCKING) 60 devman_phone_driver = ipc_connect_me_to_blocking(PHONE_NS, 65 devman_phone_driver = async_connect_me_to_blocking( 66 PHONE_NS, SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 67 else 68 devman_phone_driver = async_connect_me_to(PHONE_NS, 61 69 SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 62 else 63 devman_phone_driver = ipc_connect_me_to(PHONE_NS, 64 SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 65 70 71 fibril_mutex_unlock(&devman_phone_mutex); 66 72 return devman_phone_driver; 67 73 case DEVMAN_CLIENT: 68 if (devman_phone_client >= 0) 74 fibril_mutex_lock(&devman_phone_mutex); 75 if (devman_phone_client >= 0) { 76 fibril_mutex_unlock(&devman_phone_mutex); 69 77 return devman_phone_client; 70 71 if (flags & IPC_FLAG_BLOCKING) 72 devman_phone_client = ipc_connect_me_to_blocking(PHONE_NS, 78 } 79 80 if (flags & IPC_FLAG_BLOCKING) { 81 devman_phone_client = async_connect_me_to_blocking( 82 PHONE_NS, SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 83 } else { 84 devman_phone_client = async_connect_me_to(PHONE_NS, 73 85 SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 74 else 75 devman_phone_client = ipc_connect_me_to(PHONE_NS, 76 SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 77 86 } 87 88 fibril_mutex_unlock(&devman_phone_mutex); 78 89 return devman_phone_client; 79 90 default: … … 95 106 aid_t req = async_send_2(phone, DEVMAN_DRIVER_REGISTER, 0, 0, &answer); 96 107 97 ipcarg_t retval = async_data_write_start(phone, name, str_size(name));108 sysarg_t retval = async_data_write_start(phone, name, str_size(name)); 98 109 if (retval != EOK) { 99 110 async_wait_for(req, NULL); … … 104 115 async_set_client_connection(conn); 105 116 106 ipcarg_t callback_phonehash; 107 ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash); 117 async_connect_to_me(phone, 0, 0, 0, NULL); 108 118 async_wait_for(req, &retval); 109 119 … … 116 126 { 117 127 ipc_call_t answer; 118 a sync_send_1(phone, DEVMAN_ADD_MATCH_ID, match_id->score, &answer);128 aid_t req = async_send_1(phone, DEVMAN_ADD_MATCH_ID, match_id->score, &answer); 119 129 int retval = async_data_write_start(phone, match_id->id, str_size(match_id->id)); 120 return retval; 130 async_wait_for(req, NULL); 131 return retval; 121 132 } 122 133 … … 154 165 aid_t req = async_send_2(phone, DEVMAN_ADD_CHILD_DEVICE, parent_handle, match_count, &answer); 155 166 156 ipcarg_t retval = async_data_write_start(phone, name, str_size(name));167 sysarg_t retval = async_data_write_start(phone, name, str_size(name)); 157 168 if (retval != EOK) { 158 169 async_wait_for(req, NULL); … … 191 202 aid_t req = async_send_1(phone, DEVMAN_ADD_DEVICE_TO_CLASS, devman_handle, &answer); 192 203 193 ipcarg_t retval = async_data_write_start(phone, class_name, str_size(class_name));204 sysarg_t retval = async_data_write_start(phone, class_name, str_size(class_name)); 194 205 if (retval != EOK) { 195 206 async_wait_for(req, NULL); … … 209 220 case DEVMAN_DRIVER: 210 221 if (devman_phone_driver >= 0) { 211 ipc_hangup(devman_phone_driver);222 async_hangup(devman_phone_driver); 212 223 devman_phone_driver = -1; 213 224 } … … 215 226 case DEVMAN_CLIENT: 216 227 if (devman_phone_client >= 0) { 217 ipc_hangup(devman_phone_client);228 async_hangup(devman_phone_client); 218 229 devman_phone_client = -1; 219 230 } … … 229 240 230 241 if (flags & IPC_FLAG_BLOCKING) { 231 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,242 phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN, 232 243 DEVMAN_CONNECT_TO_DEVICE, handle); 233 244 } else { 234 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,245 phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN, 235 246 DEVMAN_CONNECT_TO_DEVICE, handle); 236 247 } … … 244 255 245 256 if (flags & IPC_FLAG_BLOCKING) { 246 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,257 phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN, 247 258 DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle); 248 259 } else { 249 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,260 phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN, 250 261 DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle); 251 262 } … … 267 278 &answer); 268 279 269 ipcarg_t retval = async_data_write_start(phone, pathname, str_size(pathname));280 sysarg_t retval = async_data_write_start(phone, pathname, str_size(pathname)); 270 281 if (retval != EOK) { 271 282 async_wait_for(req, NULL);
Note:
See TracChangeset
for help on using the changeset viewer.