home *** CD-ROM | disk | FTP | other *** search
- #ifndef __ALPHA_SYSTEM_H
- #define __ALPHA_SYSTEM_H
-
- /*
- * System defines.. Note that this is included both from .c and .S
- * files, so it does only defines, not any C code.
- */
-
- /*
- * We leave one page for the initial stack page, and one page for
- * the initial process structure. Also, the console eats 3 MB for
- * the initial bootloader (one of which we can reclaim later).
- * With a few other pages for various reasons, we'll use an initial
- * load address of 0xfffffc0000310000UL
- */
- #define BOOT_PCB 0x20000000
- #define BOOT_ADDR 0x20000000
- #define BOOT_SIZE (16*1024)
-
- #define KERNEL_START 0xfffffc0000300000
- #define SWAPPER_PGD 0xfffffc0000300000
- #define INIT_STACK 0xfffffc0000302000
- #define EMPTY_PGT 0xfffffc0000304000
- #define EMPTY_PGE 0xfffffc0000308000
- #define ZERO_PGE 0xfffffc000030A000
-
- #define START_ADDR 0xfffffc0000310000
- #define START_SIZE (1024*1024)
-
- /*
- * Common PAL-code
- */
- #define PAL_halt 0
- #define PAL_cflush 1
- #define PAL_draina 2
- #define PAL_cobratt 9
- #define PAL_bpt 128
- #define PAL_bugchk 129
- #define PAL_chmk 131
- #define PAL_callsys 131
- #define PAL_imb 134
- #define PAL_rduniq 158
- #define PAL_wruniq 159
- #define PAL_gentrap 170
- #define PAL_nphalt 190
-
- /*
- * VMS specific PAL-code
- */
- #define PAL_swppal 10
- #define PAL_mfpr_vptb 41
-
- /*
- * OSF specific PAL-code
- */
- #define PAL_mtpr_mces 17
- #define PAL_wrfen 43
- #define PAL_wrvptptr 45
- #define PAL_jtopal 46
- #define PAL_swpctx 48
- #define PAL_wrval 49
- #define PAL_rdval 50
- #define PAL_tbi 51
- #define PAL_wrent 52
- #define PAL_swpipl 53
- #define PAL_rdps 54
- #define PAL_wrkgp 55
- #define PAL_wrusp 56
- #define PAL_wrperfmon 57
- #define PAL_rdusp 58
- #define PAL_whami 60
- #define PAL_rtsys 61
- #define PAL_rti 63
-
- #ifndef __ASSEMBLY__
-
- extern void wrent(void *, unsigned long);
- extern void wrkgp(unsigned long);
- extern void wrusp(unsigned long);
- extern unsigned long rdusp(void);
-
- #define halt() __asm__ __volatile__(".long 0");
-
- extern void alpha_switch_to(unsigned long pctxp);
-
- #define switch_to(p) do { \
- current = p; \
- alpha_switch_to((unsigned long) &(p)->tss - 0xfffffc0000000000); \
- } while (0)
-
- #ifndef mb
- #define mb() __asm__ __volatile__("mb": : :"memory")
- #endif
-
- #define swpipl(__new_ipl) \
- ({ unsigned long __old_ipl; \
- __asm__ __volatile__( \
- "bis %1,%1,$16\n\t" \
- ".long 53\n\t" \
- "bis $0,$0,%0" \
- : "=r" (__old_ipl) \
- : "r" (__new_ipl) \
- : "$0", "$1", "$16", "$22", "$23", "$24", "$25"); \
- __old_ipl; })
-
- #define cli() swpipl(7)
- #define sti() swpipl(0)
- #define save_flags(flags) do { flags = swpipl(7); } while (0)
- #define restore_flags(flags) swpipl(flags)
-
- extern inline unsigned long xchg_u32(int * m, unsigned long val)
- {
- unsigned long dummy, dummy2;
-
- __asm__ __volatile__(
- "\n1:\t"
- "ldl_l %0,%1\n\t"
- "bis %2,%2,%3\n\t"
- "stl_c %3,%1\n\t"
- "beq %3,1b\n"
- : "=r" (val), "=m" (*m), "=r" (dummy), "=r" (dummy2)
- : "1" (*m), "2" (val));
- return val;
- }
-
- extern inline unsigned long xchg_u64(long * m, unsigned long val)
- {
- unsigned long dummy, dummy2;
-
- __asm__ __volatile__(
- "\n1:\t"
- "ldq_l %0,%1\n\t"
- "bis %2,%2,%3\n\t"
- "stq_c %3,%1\n\t"
- "beq %3,1b\n"
- : "=r" (val), "=m" (*m), "=r" (dummy), "=r" (dummy2)
- : "1" (*m), "2" (val));
- return val;
- }
-
- extern inline void * xchg_ptr(void *m, void *val)
- {
- return (void *) xchg_u64((long *) m, (unsigned long) val);
- }
-
- #endif /* __ASSEMBLY__ */
-
- #endif
-