Subversion Repositories HelenOS

Rev

Rev 2071 | Rev 2106 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2071 Rev 2089
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
typedef enum {
-
 
42
    CMD_MEM_READ_1 = 0,
-
 
43
    CMD_MEM_READ_2,
-
 
44
    CMD_MEM_READ_4,
-
 
45
    CMD_MEM_READ_8,
-
 
46
    CMD_MEM_WRITE_1,
-
 
47
    CMD_MEM_WRITE_2,
-
 
48
    CMD_MEM_WRITE_4,
-
 
49
    CMD_MEM_WRITE_8,
-
 
50
    CMD_PORT_READ_1,
-
 
51
    CMD_PORT_WRITE_1,
-
 
52
    CMD_IA64_GETCHAR,
-
 
53
    CMD_PPC32_GETCHAR,
-
 
54
    CMD_LAST
-
 
55
} irq_cmd_type;
-
 
56
 
-
 
57
typedef struct {
-
 
58
    irq_cmd_type cmd;
-
 
59
    void *addr;
-
 
60
    unsigned long long value;
-
 
61
    int dstarg;
-
 
62
} irq_cmd_t;
-
 
63
 
-
 
64
typedef struct {
-
 
65
    unsigned int cmdcount;
-
 
66
    irq_cmd_t *cmds;
-
 
67
} irq_code_t;
-
 
68
 
-
 
69
#ifdef KERNEL
-
 
70
 
-
 
71
#include <ipc/ipc.h>
41
#include <ipc/ipc.h>
72
#include <typedefs.h>
42
#include <ddi/irq.h>
73
#include <arch/types.h>
43
#include <arch/types.h>
74
#include <adt/list.h>
44
#include <adt/list.h>
75
 
45
 
76
/** IPC notification config structure.
-
 
77
 *
-
 
78
 * Primarily, this structure is encapsulated in the irq_t structure.
-
 
79
 * It is protected by irq_t::lock.
-
 
80
 */
-
 
81
struct ipc_notif_cfg {
-
 
82
    bool notify;            /**< When false, notifications are not sent. */
-
 
83
    answerbox_t *answerbox;     /**< Answerbox for notifications. */
-
 
84
    unative_t method;       /**< Method to be used for the notification. */
-
 
85
    irq_code_t *code;       /**< Top-half pseudocode. */
-
 
86
    count_t counter;        /**< Counter. */
-
 
87
    link_t link;            /**< Link between IRQs that are notifying the
-
 
88
                         same answerbox. The list is protected by
-
 
89
                         the answerbox irq_lock. */
-
 
90
};
-
 
91
 
-
 
92
extern int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno, unative_t method,
46
extern int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno, unative_t method,
93
    irq_code_t *ucode);
47
    irq_code_t *ucode);
94
extern void ipc_irq_send_notif(irq_t *irq);
48
extern void ipc_irq_send_notif(irq_t *irq);
95
extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3);
49
extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3);
96
extern void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno);
50
extern void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno);
97
extern void ipc_irq_cleanup(answerbox_t *box);
51
extern void ipc_irq_cleanup(answerbox_t *box);
98
 
52
 
99
#endif
53
#endif
100
 
54
 
101
#endif
-
 
102
 
-
 
103
/** @}
55
/** @}
104
 */
56
 */