Rev 1919 | Rev 1924 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1919 | Rev 1923 | ||
|---|---|---|---|
| Line 36... | Line 36... | ||
| 36 | #define KERN_IPC_IRQ_H_ |
36 | #define KERN_IPC_IRQ_H_ |
| 37 | 37 | ||
| 38 | /** Maximum length of IPC IRQ program */ |
38 | /** Maximum length of IPC IRQ program */ |
| 39 | #define IRQ_MAX_PROG_SIZE 10 |
39 | #define IRQ_MAX_PROG_SIZE 10 |
| 40 | 40 | ||
| 41 | /** Reserved 'virtual' messages for kernel notifications */ |
- | |
| 42 | #define IPC_IRQ_RESERVED_VIRTUAL 10 |
- | |
| 43 | - | ||
| 44 | #define IPC_IRQ_KLOG (-1) |
41 | #define VIRT_INR_KLOG -2 |
| 45 | #define IPC_IRQ_KBDRESTART (-2) |
42 | #define VIRT_INR_KBDRESTART -3 |
| 46 | 43 | ||
| 47 | typedef enum { |
44 | typedef enum { |
| 48 | CMD_MEM_READ_1 = 0, |
45 | CMD_MEM_READ_1 = 0, |
| 49 | CMD_MEM_READ_2, |
46 | CMD_MEM_READ_2, |
| 50 | CMD_MEM_READ_4, |
47 | CMD_MEM_READ_4, |
| Line 73... | Line 70... | ||
| 73 | } irq_code_t; |
70 | } irq_code_t; |
| 74 | 71 | ||
| 75 | #ifdef KERNEL |
72 | #ifdef KERNEL |
| 76 | 73 | ||
| 77 | #include <ipc/ipc.h> |
74 | #include <ipc/ipc.h> |
| - | 75 | #include <typedefs.h> |
|
| - | 76 | #include <arch/types.h> |
|
| 78 | 77 | ||
| - | 78 | /** IPC notification config structure. |
|
| - | 79 | * |
|
| 79 | extern void ipc_irq_make_table(int irqcount); |
80 | * Primarily, this structure is encapsulated in the irq_t structure. |
| - | 81 | * It is protected by irq_t::lock. |
|
| - | 82 | */ |
|
| - | 83 | struct ipc_notif_cfg { |
|
| - | 84 | answerbox_t *answerbox; /**< Answerbox for notifications. */ |
|
| - | 85 | unative_t method; /**< Method to be used for the notification. */ |
|
| - | 86 | irq_code_t *code; /**< Top-half pseudocode. */ |
|
| - | 87 | count_t counter; /**< Counter. */ |
|
| - | 88 | }; |
|
| - | 89 | ||
| 80 | extern int ipc_irq_register(answerbox_t *box, int irq, irq_code_t *ucode); |
90 | extern int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno, unative_t method, |
| - | 91 | irq_code_t *ucode); |
|
| 81 | extern void ipc_irq_send_notif(int irq); |
92 | extern void ipc_irq_send_notif(irq_t *irq); |
| 82 | extern void ipc_irq_send_msg(int irq, unative_t a1, unative_t a2, unative_t a3); |
93 | extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3); |
| 83 | extern void ipc_irq_unregister(answerbox_t *box, int irq); |
94 | extern void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno); |
| 84 | extern void irq_ipc_bind_arch(unative_t irq); |
- | |
| 85 | extern void ipc_irq_cleanup(answerbox_t *box); |
95 | extern void ipc_irq_cleanup(answerbox_t *box); |
| 86 | 96 | ||
| 87 | #endif |
97 | #endif |
| 88 | 98 | ||
| 89 | #endif |
99 | #endif |