home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.2 / LINUX-1.2 / LINUX-1 / linux / include / asm-alpha / processor.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-24  |  1.8 KB  |  90 lines

  1. /*
  2.  * include/asm-alpha/processor.h
  3.  *
  4.  * Copyright (C) 1994 Linus Torvalds
  5.  */
  6.  
  7. #ifndef __ASM_ALPHA_PROCESSOR_H
  8. #define __ASM_ALPHA_PROCESSOR_H
  9.  
  10. /*
  11.  * We have a 41-bit user address space: 2TB user VM...
  12.  */
  13. #define TASK_SIZE (0x20000000000UL)
  14.  
  15. /*
  16.  * Bus types
  17.  */
  18. #define EISA_bus 1
  19. #define EISA_bus__is_a_macro /* for versions in ksyms.c */
  20. #define MCA_bus 0
  21. #define MCA_bus__is_a_macro /* for versions in ksyms.c */
  22.  
  23. /*
  24.  * The alpha has no problems with write protection
  25.  */
  26. #define wp_works_ok 1
  27. #define wp_works_ok__is_a_macro /* for versions in ksyms.c */
  28.  
  29. struct thread_struct {
  30.     unsigned long ksp;
  31.     unsigned long usp;
  32.     unsigned long ptbr;
  33.     unsigned int pcc;
  34.     unsigned int asn;
  35.     unsigned long unique;
  36.     unsigned long flags;
  37.     unsigned long res1, res2;
  38. };
  39.  
  40. #define INIT_MMAP { &init_task, 0xfffffc0000300000,  0xfffffc0010000000, \
  41.     PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC }
  42.  
  43. #define INIT_TSS  { \
  44.     0, 0, 0, \
  45.     0, 0, 0, \
  46.     0, 0, 0, \
  47. }
  48.  
  49. /*
  50.  * These are the "cli()" and "sti()" for software interrupts
  51.  * They work by increasing/decreasing the "intr_count" value, 
  52.  * and as such can be nested arbitrarily.
  53.  */
  54. extern inline void start_bh_atomic(void)
  55. {
  56.     unsigned long dummy;
  57.     __asm__ __volatile__(
  58.         "\n1:\t"
  59.         "ldq_l %0,%1\n\t"
  60.         "addq %0,1,%0\n\t"
  61.         "stq_c %0,%1\n\t"
  62.         "beq %0,1b\n"
  63.         : "=r" (dummy), "=m" (intr_count)
  64.         : "0" (0));
  65. }
  66.  
  67. extern inline void end_bh_atomic(void)
  68. {
  69.     unsigned long dummy;
  70.     __asm__ __volatile__(
  71.         "\n1:\t"
  72.         "ldq_l %0,%1\n\t"
  73.         "subq %0,1,%0\n\t"
  74.         "stq_c %0,%1\n\t"
  75.         "beq %0,1b\n"
  76.         : "=r" (dummy), "=m" (intr_count)
  77.         : "0" (0));
  78. }
  79.  
  80. /*
  81.  * Do necessary setup to start up a newly executed thread.
  82.  */
  83. static inline void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp)
  84. {
  85.     regs->pc = pc;
  86.     wrusp(sp);
  87. }
  88.  
  89. #endif /* __ASM_ALPHA_PROCESSOR_H */
  90.