Changeset bd48f4c in mainline for kernel/arch/ia32/include/interrupt.h


Ignore:
Timestamp:
2010-07-12T10:53:30Z (15 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bd11d3e
Parents:
c40e6ef (diff), bee2d4c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/include/interrupt.h

    rc40e6ef rbd48f4c  
    3838#include <typedefs.h>
    3939#include <arch/pm.h>
     40#include <trace.h>
    4041
    41 #define IVT_ITEMS       IDT_ITEMS
    42 #define IVT_FIRST       0
     42#define IVT_ITEMS  IDT_ITEMS
     43#define IVT_FIRST  0
    4344
    44 #define EXC_COUNT       32
    45 #define IRQ_COUNT       16
     45#define EXC_COUNT  32
     46#define IRQ_COUNT  16
    4647
    47 #define IVT_EXCBASE     0
    48 #define IVT_IRQBASE     (IVT_EXCBASE + EXC_COUNT)
    49 #define IVT_FREEBASE    (IVT_IRQBASE + IRQ_COUNT)
     48#define IVT_EXCBASE   0
     49#define IVT_IRQBASE   (IVT_EXCBASE + EXC_COUNT)
     50#define IVT_FREEBASE  (IVT_IRQBASE + IRQ_COUNT)
    5051
    51 #define IRQ_CLK         0
    52 #define IRQ_KBD         1
    53 #define IRQ_PIC1        2
    54 #define IRQ_PIC_SPUR    7
    55 #define IRQ_MOUSE       12
    56 #define IRQ_DP8390      9
     52#define IRQ_CLK       0
     53#define IRQ_KBD       1
     54#define IRQ_PIC1      2
     55#define IRQ_PIC_SPUR  7
     56#define IRQ_MOUSE     12
     57#define IRQ_DP8390    9
    5758
    58 /* this one must have four least significant bits set to ones */
    59 #define VECTOR_APIC_SPUR        (IVT_ITEMS - 1)
     59/* This one must have four least significant bits set to ones */
     60#define VECTOR_APIC_SPUR  (IVT_ITEMS - 1)
    6061
    6162#if (((VECTOR_APIC_SPUR + 1) % 16) || VECTOR_APIC_SPUR >= IVT_ITEMS)
     
    6364#endif
    6465
    65 #define VECTOR_DEBUG                    1
    66 #define VECTOR_CLK                      (IVT_IRQBASE + IRQ_CLK)
    67 #define VECTOR_PIC_SPUR                 (IVT_IRQBASE + IRQ_PIC_SPUR)
    68 #define VECTOR_SYSCALL                  IVT_FREEBASE
    69 #define VECTOR_TLB_SHOOTDOWN_IPI        (IVT_FREEBASE + 1)
    70 #define VECTOR_DEBUG_IPI                (IVT_FREEBASE + 2)
     66#define VECTOR_DEBUG              1
     67#define VECTOR_CLK                (IVT_IRQBASE + IRQ_CLK)
     68#define VECTOR_PIC_SPUR           (IVT_IRQBASE + IRQ_PIC_SPUR)
     69#define VECTOR_SYSCALL            IVT_FREEBASE
     70#define VECTOR_TLB_SHOOTDOWN_IPI  (IVT_FREEBASE + 1)
     71#define VECTOR_DEBUG_IPI          (IVT_FREEBASE + 2)
    7172
    7273typedef struct istate {
     74        /*
     75         * The strange order of the GPRs is given by the requirement to use the
     76         * istate structure for both regular interrupts and exceptions as well
     77         * as for syscall handlers which use this order as an optimization.
     78         */
     79        uint32_t edx;
     80        uint32_t ecx;
     81        uint32_t ebx;
     82        uint32_t esi;
     83        uint32_t edi;
     84        uint32_t ebp;
    7385        uint32_t eax;
    74         uint32_t ecx;
    75         uint32_t edx;
    76         uint32_t ebp;
    77 
     86       
     87        uint32_t ebp_frame;  /* imitation of frame pointer linkage */
     88        uint32_t eip_frame;  /* imitation of return address linkage */
     89       
    7890        uint32_t gs;
    7991        uint32_t fs;
    8092        uint32_t es;
    8193        uint32_t ds;
    82 
    83         uint32_t error_word;
     94       
     95        uint32_t error_word;  /* real or fake error word */
    8496        uint32_t eip;
    8597        uint32_t cs;
    8698        uint32_t eflags;
    87         uint32_t stack[];
     99        uint32_t esp;         /* only if istate_t is from uspace */
     100        uint32_t ss;          /* only if istate_t is from uspace */
    88101} istate_t;
    89102
    90103/** Return true if exception happened while in userspace */
    91 static inline int istate_from_uspace(istate_t *istate)
     104NO_TRACE static inline int istate_from_uspace(istate_t *istate)
    92105{
    93106        return !(istate->eip & 0x80000000);
    94107}
    95108
    96 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr)
     109NO_TRACE static inline void istate_set_retaddr(istate_t *istate,
     110    uintptr_t retaddr)
    97111{
    98112        istate->eip = retaddr;
    99113}
    100114
    101 static inline unative_t istate_get_pc(istate_t *istate)
     115NO_TRACE static inline unative_t istate_get_pc(istate_t *istate)
    102116{
    103117        return istate->eip;
    104118}
    105119
    106 static inline unative_t istate_get_fp(istate_t *istate)
     120NO_TRACE static inline unative_t istate_get_fp(istate_t *istate)
    107121{
    108122        return istate->ebp;
    109123}
    110124
    111 extern void (* disable_irqs_function)(uint16_t irqmask);
    112 extern void (* enable_irqs_function)(uint16_t irqmask);
     125extern void (* disable_irqs_function)(uint16_t);
     126extern void (* enable_irqs_function)(uint16_t);
    113127extern void (* eoi_function)(void);
    114128
    115 extern void decode_istate(istate_t *istate);
    116129extern void interrupt_init(void);
    117 extern void trap_virtual_enable_irqs(uint16_t irqmask);
    118 extern void trap_virtual_disable_irqs(uint16_t irqmask);
     130extern void trap_virtual_enable_irqs(uint16_t);
     131extern void trap_virtual_disable_irqs(uint16_t);
    119132
    120133#endif
Note: See TracChangeset for help on using the changeset viewer.