Changeset 2b017ba in mainline for kernel/generic/include


Ignore:
Timestamp:
2006-10-16T20:51:55Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5f9b4d9a
Parents:
e3890b3f
Message:

Replace the old IRQ dispatcher and IPC notifier with new implementation.
Note that all architectures except for sparc64 are now broken
and don't even compile.

Location:
kernel/generic/include
Files:
5 edited

Legend:

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

    re3890b3f r2b017ba  
    3737
    3838#include <arch/types.h>
     39#include <typedefs.h>
    3940#include <adt/list.h>
    40 #include <ipc/ipc.h>
    4141#include <ipc/irq.h>
    42 #include <atomic.h>
    4342#include <synch/spinlock.h>
    4443
     
    5251        IRQ_TRIGGER_EDGE
    5352} irq_trigger_t;
    54 
    55 typedef struct irq irq_t;
    5653
    5754typedef void (* irq_handler_t)(irq_t *irq, void *arg, ...);
     
    8885        void *arg;
    8986
    90         /** Answerbox of the task that wanted to be notified. */
    91         answerbox_t *notif_answerbox;
    92         /** Pseudo-code to be performed by the top-half
    93          *  before a notification is sent. */
    94         irq_code_t *code;
    95         /** Method of the notification. */
    96         unative_t method;
    97         /** Counter of IRQ notifications. */
    98         atomic_t counter;
     87        /** Notification configuration structure. */
     88        ipc_notif_cfg_t notif_cfg;
    9989};
    10090
  • kernel/generic/include/ipc/ipc.h

    re3890b3f r2b017ba  
    156156#ifdef KERNEL
    157157
    158 #include <synch/mutex.h>
    159 #include <synch/condvar.h>
     158#include <synch/waitq.h>
    160159#include <adt/list.h>
    161160
  • kernel/generic/include/ipc/irq.h

    re3890b3f r2b017ba  
    3939#define IRQ_MAX_PROG_SIZE 10
    4040
    41 /** Reserved 'virtual' messages for kernel notifications */
    42 #define IPC_IRQ_RESERVED_VIRTUAL 10
    43 
    44 #define IPC_IRQ_KLOG       (-1)
    45 #define IPC_IRQ_KBDRESTART (-2)
     41#define VIRT_INR_KLOG           -2
     42#define VIRT_INR_KBDRESTART     -3
    4643
    4744typedef enum {
     
    7673
    7774#include <ipc/ipc.h>
     75#include <typedefs.h>
     76#include <arch/types.h>
    7877
    79 extern void ipc_irq_make_table(int irqcount);
    80 extern int ipc_irq_register(answerbox_t *box, int irq, irq_code_t *ucode);
    81 extern void ipc_irq_send_notif(int irq);
    82 extern void ipc_irq_send_msg(int irq, unative_t a1, unative_t a2, unative_t a3);
    83 extern void ipc_irq_unregister(answerbox_t *box, int irq);
    84 extern void irq_ipc_bind_arch(unative_t irq);
     78/** IPC notification config structure.
     79 *
     80 * Primarily, this structure is encapsulated in the irq_t structure.
     81 * It is protected by irq_t::lock.
     82 */
     83struct 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
     90extern int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno, unative_t method,
     91        irq_code_t *ucode);
     92extern void ipc_irq_send_notif(irq_t *irq);
     93extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3);
     94extern void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno);
    8595extern void ipc_irq_cleanup(answerbox_t *box);
    8696
  • kernel/generic/include/ipc/sysipc.h

    re3890b3f r2b017ba  
    3939#include <ipc/irq.h>
    4040#include <arch/types.h>
     41#include <typedefs.h>
    4142
    4243unative_t sys_ipc_call_sync_fast(unative_t phoneid, unative_t method,
     
    5455                              unative_t method, unative_t arg1);
    5556unative_t sys_ipc_hangup(int phoneid);
    56 unative_t sys_ipc_register_irq(int irq, irq_code_t *ucode);
    57 unative_t sys_ipc_unregister_irq(int irq);
     57unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method, irq_code_t *ucode);
     58unative_t sys_ipc_unregister_irq(inr_t inr, devno_t devno);
    5859
    5960#endif
  • kernel/generic/include/typedefs.h

    re3890b3f r2b017ba  
    9898typedef signed int inr_t;
    9999typedef signed int devno_t;
     100typedef struct irq irq_t;
     101typedef struct ipc_notif_cfg ipc_notif_cfg_t;
    100102
    101103#endif
Note: See TracChangeset for help on using the changeset viewer.