Subversion Repositories HelenOS

Rev

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