Changeset d2e0a8cb in mainline


Ignore:
Timestamp:
2007-11-25T10:04:38Z (17 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
be815bc
Parents:
b3cd9eb
Message:

Support for 5 payload arguments for IPC irq notifications and the pseudo code.

Location:
kernel/generic
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/ipc/irq.h

    rb3cd9eb rd2e0a8cb  
    4747    unative_t method, irq_code_t *ucode);
    4848extern void ipc_irq_send_notif(irq_t *irq);
    49 extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2,
    50     unative_t a3);
    5149extern void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno);
    5250extern void ipc_irq_cleanup(answerbox_t *box);
     51
     52/*
     53 * User friendly wrappers for ipc_irq_send_msg(). They are in the form
     54 * ipc_irq_send_msg_m(), where m is the number of payload arguments.
     55 */
     56#define ipc_irq_send_msg_1(irq, a1) \
     57    ipc_irq_send_msg((irq), (a1), 0, 0, 0, 0)
     58#define ipc_irq_send_msg_2(irq, a1, a2) \
     59    ipc_irq_send_msg((irq), (a1), (a2), 0, 0, 0)
     60#define ipc_irq_send_msg_3(irq, a1, a2, a3) \
     61    ipc_irq_send_msg((irq), (a1), (a2), (a3), 0, 0)
     62#define ipc_irq_send_msg_4(irq, a1, a2, a3, a4) \
     63    ipc_irq_send_msg((irq), (a1), (a2), (a3), (a4), 0)
     64#define ipc_irq_send_msg_5(irq, a1, a2, a3, a4, a5) \
     65    ipc_irq_send_msg((irq), (a1), (a2), (a3), (a4), (a5))
     66
     67extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2,
     68    unative_t a3, unative_t a4, unative_t a5);
    5369
    5470#endif
  • kernel/generic/src/console/klog.c

    rb3cd9eb rd2e0a8cb  
    130130                        goto out;
    131131        }
    132         ipc_irq_send_msg(&klog_irq, klogpos, ret, 0);
     132        ipc_irq_send_msg_2(&klog_irq, klogpos, ret);
    133133        klogpos += ret;
    134134        if (klogpos >= klogsize)
  • kernel/generic/src/ipc/irq.c

    rb3cd9eb rd2e0a8cb  
    9090                        break;
    9191                case CMD_MEM_WRITE_2:
    92                         *((uint16_t *) code->cmds[i].addr) = code->cmds[i].value;
     92                        *((uint16_t *) code->cmds[i].addr) =
     93                            code->cmds[i].value;
    9394                        break;
    9495                case CMD_MEM_WRITE_4:
    95                         *((uint32_t *) code->cmds[i].addr) = code->cmds[i].value;
     96                        *((uint32_t *) code->cmds[i].addr) =
     97                            code->cmds[i].value;
    9698                        break;
    9799                case CMD_MEM_WRITE_8:
    98                         *((uint64_t *) code->cmds[i].addr) = code->cmds[i].value;
     100                        *((uint64_t *) code->cmds[i].addr) =
     101                            code->cmds[i].value;
    99102                        break;
    100103#if defined(ia32) || defined(amd64)
     
    119122                        break;
    120123                }
    121                 if (code->cmds[i].dstarg && code->cmds[i].dstarg < 4) {
     124                if (code->cmds[i].dstarg && code->cmds[i].dstarg <
     125                    IPC_CALL_LEN) {
    122126                        call->data.args[code->cmds[i].dstarg] = dstval;
    123127                }
     
    283287 * @param a2            Driver-specific payload argument.
    284288 * @param a3            Driver-specific payload argument.
    285  */
    286 void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3)
     289 * @param a4            Driver-specific payload argument.
     290 * @param a5            Driver-specific payload argument.
     291 */
     292void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3,
     293    unative_t a4, unative_t a5)
    287294{
    288295        call_t *call;
     
    301308                IPC_SET_ARG2(call->data, a2);
    302309                IPC_SET_ARG3(call->data, a3);
     310                IPC_SET_ARG4(call->data, a4);
     311                IPC_SET_ARG5(call->data, a5);
    303312                /* Put a counter to the message */
    304313                call->priv = ++irq->notif_cfg.counter;
Note: See TracChangeset for help on using the changeset viewer.