Changes in kernel/generic/src/ipc/irq.c [1d432f9:8add9ca5] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/irq.c
r1d432f9 r8add9ca5 42 42 * 43 43 * The structure of a notification message is as follows: 44 * - METHOD: method as registered by the SYS_IPC_REGISTER_IRQ syscall 44 * - IMETHOD: interface and method as registered by the SYS_REGISTER_IRQ 45 * syscall 45 46 * - ARG1: payload modified by a 'top-half' handler 46 47 * - ARG2: payload modified by a 'top-half' handler … … 49 50 * - ARG5: payload modified by a 'top-half' handler 50 51 * - in_phone_hash: interrupt counter (may be needed to assure correct order 51 * in multithreaded drivers)52 * in multithreaded drivers) 52 53 * 53 54 * Note on synchronization for ipc_irq_register(), ipc_irq_unregister(), … … 130 131 /** Register an answerbox as a receiving end for IRQ notifications. 131 132 * 132 * @param box 133 * @param inr 134 * @param devno 135 * @param method Method to be associated with the notification.136 * @param ucode Uspace pointer to top-half pseudocode.137 * 138 * @return EBADMEM, ENOENT or EEXISTS on failure or 0 on success.133 * @param box Receiving answerbox. 134 * @param inr IRQ number. 135 * @param devno Device number. 136 * @param imethod Interface and method to be associated with the 137 * notification. 138 * @param ucode Uspace pointer to top-half pseudocode. 139 * @return EOK on success or a negative error code. 139 140 * 140 141 */ 141 142 int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno, 142 unative_tmethod, irq_code_t *ucode)143 { 144 unative_t key[] = {145 ( unative_t) inr,146 ( unative_t) devno143 sysarg_t imethod, irq_code_t *ucode) 144 { 145 sysarg_t key[] = { 146 (sysarg_t) inr, 147 (sysarg_t) devno 147 148 }; 149 150 if ((inr < 0) || (inr > last_inr)) 151 return ELIMIT; 148 152 149 153 irq_code_t *code; … … 167 171 irq->notif_cfg.notify = true; 168 172 irq->notif_cfg.answerbox = box; 169 irq->notif_cfg. method =method;173 irq->notif_cfg.imethod = imethod; 170 174 irq->notif_cfg.code = code; 171 175 irq->notif_cfg.counter = 0; … … 206 210 /** Unregister task from IRQ notification. 207 211 * 208 * @param box 209 * @param inr 210 * @param devno 211 * 212 * @param box Answerbox associated with the notification. 213 * @param inr IRQ number. 214 * @param devno Device number. 215 * @return EOK on success or a negative error code. 212 216 */ 213 217 int ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno) 214 218 { 215 unative_t key[] = {216 ( unative_t) inr,217 ( unative_t) devno219 sysarg_t key[] = { 220 (sysarg_t) inr, 221 (sysarg_t) devno 218 222 }; 223 224 if ((inr < 0) || (inr > last_inr)) 225 return ELIMIT; 219 226 220 227 irq_spinlock_lock(&irq_uspace_hash_table_lock, true); … … 290 297 } 291 298 292 unative_t key[2];299 sysarg_t key[2]; 293 300 key[0] = irq->inr; 294 301 key[1] = irq->devno; … … 397 404 (uint32_t) code->cmds[i].value); 398 405 break; 406 case CMD_PIO_WRITE_A_8: 407 if (srcarg) { 408 pio_write_8((ioport8_t *) code->cmds[i].addr, 409 (uint8_t) scratch[srcarg]); 410 } 411 break; 412 case CMD_PIO_WRITE_A_16: 413 if (srcarg) { 414 pio_write_16((ioport16_t *) code->cmds[i].addr, 415 (uint16_t) scratch[srcarg]); 416 } 417 break; 418 case CMD_PIO_WRITE_A_32: 419 if (srcarg) { 420 pio_write_32((ioport32_t *) code->cmds[i].addr, 421 (uint32_t) scratch[srcarg]); 422 } 423 break; 399 424 case CMD_BTEST: 400 425 if ((srcarg) && (dstarg)) { … … 444 469 445 470 /* Set up args */ 446 IPC_SET_ METHOD(call->data, irq->notif_cfg.method);471 IPC_SET_IMETHOD(call->data, irq->notif_cfg.imethod); 447 472 IPC_SET_ARG1(call->data, irq->notif_cfg.scratch[1]); 448 473 IPC_SET_ARG2(call->data, irq->notif_cfg.scratch[2]); … … 465 490 * 466 491 */ 467 void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3,468 unative_t a4, unative_t a5)492 void ipc_irq_send_msg(irq_t *irq, sysarg_t a1, sysarg_t a2, sysarg_t a3, 493 sysarg_t a4, sysarg_t a5) 469 494 { 470 495 irq_spinlock_lock(&irq->lock, true); … … 481 506 call->priv = ++irq->notif_cfg.counter; 482 507 483 IPC_SET_ METHOD(call->data, irq->notif_cfg.method);508 IPC_SET_IMETHOD(call->data, irq->notif_cfg.imethod); 484 509 IPC_SET_ARG1(call->data, a1); 485 510 IPC_SET_ARG2(call->data, a2);
Note:
See TracChangeset
for help on using the changeset viewer.