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 |