version 1.1, 2008/06/03 10:38:45 |
version 1.1.1.1.2.1, 2008/08/13 17:12:30 |
|
|
/* |
/* |
* Page mapping |
* Page mapping |
*/ |
*/ |
#define phys_to_virt(p_addr) (void *)((u_long)(p_addr) + PAGE_OFFSET) |
#define phys_to_virt(pa) (void *)((paddr_t)(pa) + PAGE_OFFSET) |
#define virt_to_phys(v_addr) (void *)((u_long)(v_addr) - PAGE_OFFSET) |
#define virt_to_phys(va) (void *)((vaddr_t)(va) - PAGE_OFFSET) |
|
|
/* |
/* |
* Kernel/User Locations |
* Kernel/User Locations |
|
|
#if KERNEL_BASE == 0 |
#if KERNEL_BASE == 0 |
#define kern_area(addr) 1 |
#define kern_area(addr) 1 |
#else |
#else |
#define kern_area(addr) ((u_long)(addr) >= (u_long)KERNEL_BASE) |
#define kern_area(addr) ((vaddr_t)(addr) >= (vaddr_t)KERNEL_BASE) |
#endif |
#endif |
#define user_area(addr) ((u_long)(addr) < (u_long)USER_MAX) |
#define user_area(addr) ((vaddr_t)(addr) < (vaddr_t)USER_MAX) |
|
|
/* |
/* |
* Interrupt |
* Interrupt |
*/ |
*/ |
#define NIRQS 16 /* number of interrupt vectors */ |
#define NIRQS 16 /* number of interrupt vectors */ |
|
|
#define interrupt_enable() __asm__ __volatile__("sti"::) |
extern void interrupt_enable(void); |
#define interrupt_disable() __asm__ __volatile__("cli"::) |
extern void interrupt_disable(void); |
|
extern void interrupt_save(int *); |
static __inline void |
extern void interrupt_restore(int); |
interrupt_save(int *sts) |
|
{ |
|
register u_long eflags; |
|
__asm__ __volatile__( |
|
"pushfl\n\t" |
|
"popl %0\n\t" |
|
:"=r" (eflags)); |
|
*sts = (int)(eflags & 0x200); |
|
} |
|
|
|
static __inline void |
|
interrupt_restore(int sts) |
|
{ |
|
__asm__ __volatile__( |
|
"pushfl\n\t" |
|
"popl %%eax\n\t" |
|
"andl $0xfffffdff, %%eax\n\t" |
|
"orl %0, %%eax\n\t" |
|
"pushl %%eax\n\t" |
|
"popfl\n\t" |
|
: |
|
:"r" (sts) |
|
:"eax"); |
|
} |
|
|
|
extern void interrupt_mask(int); |
extern void interrupt_mask(int); |
extern void interrupt_unmask(int, int); |
extern void interrupt_unmask(int, int); |
extern void interrupt_setup(int, int); |
extern void interrupt_setup(int, int); |
|
extern void interrupt_handler(struct cpu_regs *); |
extern void interrupt_init(void); |
extern void interrupt_init(void); |
|
|
/* Interrupt mode for interrupt_setup() */ |
/* Interrupt mode for interrupt_setup() */ |
|
|
extern void diag_init(void); |
extern void diag_init(void); |
extern void diag_print(char *); |
extern void diag_print(char *); |
|
|
#define machine_idle() __asm__ __volatile__("sti; hlt") |
|
extern void machine_reset(void); |
extern void machine_reset(void); |
extern void machine_init(void); |
extern void machine_init(void); |
|
extern void machine_idle(void); |
|
|
#endif /* !__ASSEMBLY__ */ |
#endif /* !__ASSEMBLY__ */ |
#endif /* !_PC_PLATFORM_H */ |
#endif /* !_PC_PLATFORM_H */ |