Changeset 9233e9d in mainline
- Timestamp:
- 2017-12-08T21:17:27Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 071a1ddb
- Parents:
- 6deb2cd
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2017-12-07 16:48:51)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2017-12-08 21:17:27)
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/ipc/irq.h
r6deb2cd r9233e9d 51 51 extern void ipc_irq_top_half_handler(irq_t *); 52 52 53 extern int ipc_irq_subscribe(answerbox_t *, inr_t, sysarg_t, irq_code_t *); 53 extern int ipc_irq_subscribe(answerbox_t *, inr_t, sysarg_t, irq_code_t *, 54 cap_handle_t *); 54 55 extern int ipc_irq_unsubscribe(answerbox_t *, int); 55 56 -
kernel/generic/include/ipc/sysipc.h
r6deb2cd r9233e9d 56 56 extern sysarg_t sys_ipc_hangup(sysarg_t); 57 57 58 extern sysarg_t sys_ipc_irq_subscribe(inr_t, sysarg_t, irq_code_t * );58 extern sysarg_t sys_ipc_irq_subscribe(inr_t, sysarg_t, irq_code_t *, cap_handle_t *); 59 59 extern sysarg_t sys_ipc_irq_unsubscribe(sysarg_t); 60 60 -
kernel/generic/src/ipc/irq.c
r6deb2cd r9233e9d 308 308 * @param ucode Uspace pointer to top-half IRQ code. 309 309 * 310 * @return IRQ capability handle. 311 * @return Negative error code. 310 * @param[out] uspace_handle Uspace pointer to IRQ capability handle 311 * 312 * @return Error code. 312 313 * 313 314 */ 314 315 int ipc_irq_subscribe(answerbox_t *box, inr_t inr, sysarg_t imethod, 315 irq_code_t *ucode )316 irq_code_t *ucode, cap_handle_t *uspace_handle) 316 317 { 317 318 if ((inr < 0) || (inr > last_inr)) … … 333 334 return handle; 334 335 336 int rc = copy_to_uspace(uspace_handle, &handle, sizeof(cap_handle_t)); 337 if (rc != EOK) { 338 cap_free(TASK, handle); 339 return rc; 340 } 341 335 342 irq_t *irq = (irq_t *) slab_alloc(irq_cache, FRAME_ATOMIC); 336 343 if (!irq) { … … 371 378 cap_publish(TASK, handle, kobject); 372 379 373 return handle;380 return EOK; 374 381 } 375 382 -
kernel/generic/src/ipc/sysipc.c
r6deb2cd r9233e9d 864 864 * @param ucode Uspace pointer to the top-half pseudocode. 865 865 * 866 * @return IRQ kernel object capability 866 * @param[out] uspace_handle Uspace pointer to IRQ kernel object capability 867 * 867 868 * @return EPERM 868 869 * @return Error code returned by ipc_irq_subscribe(). 869 870 * 870 871 */ 871 sysarg_t sys_ipc_irq_subscribe(inr_t inr, sysarg_t imethod, irq_code_t *ucode) 872 sysarg_t sys_ipc_irq_subscribe(inr_t inr, sysarg_t imethod, irq_code_t *ucode, 873 cap_handle_t *uspace_handle) 872 874 { 873 875 if (!(perm_get(TASK) & PERM_IRQ_REG)) 874 876 return EPERM; 875 877 876 return ipc_irq_subscribe(&TASK->answerbox, inr, imethod, ucode );878 return ipc_irq_subscribe(&TASK->answerbox, inr, imethod, ucode, uspace_handle); 877 879 } 878 880 -
uspace/lib/c/generic/async.c
r6deb2cd r9233e9d 1076 1076 futex_up(&async_futex); 1077 1077 1078 return ipc_irq_subscribe(inr, imethod, ucode); 1078 cap_handle_t cap; 1079 int rc = ipc_irq_subscribe(inr, imethod, ucode, &cap); 1080 if (rc != EOK) { 1081 return rc; 1082 } 1083 return cap; 1079 1084 } 1080 1085 -
uspace/lib/c/generic/irq.c
r6deb2cd r9233e9d 58 58 * @param ucode Top-half pseudocode handler. 59 59 * 60 * @return IRQ capability handle returned by the kernel. 60 * @param[out] out_handle IRQ capability handle returned by the kernel. 61 * 61 62 * @return Error code returned by the kernel. 62 63 * 63 64 */ 64 int ipc_irq_subscribe(int inr, sysarg_t method, const irq_code_t *ucode) 65 int ipc_irq_subscribe(int inr, sysarg_t method, const irq_code_t *ucode, 66 cap_handle_t *out_handle) 65 67 { 66 68 if (ucode == NULL) 67 69 ucode = &default_ucode; 68 70 69 return __SYSCALL3(SYS_IPC_IRQ_SUBSCRIBE, inr, method, (sysarg_t) ucode); 71 return __SYSCALL4(SYS_IPC_IRQ_SUBSCRIBE, inr, method, (sysarg_t) ucode, 72 (sysarg_t) out_handle); 70 73 } 71 74 … … 77 80 * 78 81 */ 79 int ipc_irq_unsubscribe( int cap)82 int ipc_irq_unsubscribe(cap_handle_t cap) 80 83 { 81 84 return __SYSCALL1(SYS_IPC_IRQ_UNSUBSCRIBE, cap); -
uspace/lib/c/include/ipc/irq.h
r6deb2cd r9233e9d 38 38 #include <types/common.h> 39 39 #include <abi/ddi/irq.h> 40 #include <abi/cap.h> 40 41 41 extern int ipc_irq_subscribe(int, sysarg_t, const irq_code_t * );42 extern int ipc_irq_unsubscribe( int);42 extern int ipc_irq_subscribe(int, sysarg_t, const irq_code_t *, cap_handle_t *); 43 extern int ipc_irq_unsubscribe(cap_handle_t); 43 44 44 45 #endif
Note:
See TracChangeset
for help on using the changeset viewer.