[BACK]Return to cpu.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / powerpc / include

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/powerpc/include/cpu.h between version 1.10 and 1.10.6.11

version 1.10, 2001/08/28 03:03:43 version 1.10.6.11, 2002/08/27 23:45:15
Line 38 
Line 38 
 #if defined(_KERNEL_OPT)  #if defined(_KERNEL_OPT)
 #include "opt_lockdebug.h"  #include "opt_lockdebug.h"
 #include "opt_multiprocessor.h"  #include "opt_multiprocessor.h"
   #include "opt_ppcarch.h"
 #endif  #endif
   
 #include <sys/device.h>  
 #include <machine/frame.h>  #include <machine/frame.h>
 #include <machine/psl.h>  #include <machine/psl.h>
 #include <machine/intr.h>  #include <machine/intr.h>
   #include <sys/device.h>
   
   
   struct cache_info {
           int dcache_size;
           int dcache_line_size;
           int icache_size;
           int icache_line_size;
   };
   
   
 #ifdef _KERNEL  #ifdef _KERNEL
 #include <sys/sched.h>  #include <sys/sched.h>
   #include <dev/sysmon/sysmonvar.h>
   
 struct cpu_info {  struct cpu_info {
         struct schedstate_percpu ci_schedstate; /* scheduler state */          struct schedstate_percpu ci_schedstate; /* scheduler state */
 #if defined(DIAGNOSTIC) || defined(LOCKDEBUG)  #if defined(DIAGNOSTIC) || defined(LOCKDEBUG)
Line 54  struct cpu_info {
Line 66  struct cpu_info {
         u_long ci_simple_locks;         /* # of simple locks held */          u_long ci_simple_locks;         /* # of simple locks held */
 #endif  #endif
         struct device *ci_dev;          /* device of corresponding cpu */          struct device *ci_dev;          /* device of corresponding cpu */
         struct proc *ci_curproc;        /* current owner of the processor */          struct lwp *ci_curlwp;          /* current owner of the processor */
   
         struct pcb *ci_curpcb;          struct pcb *ci_curpcb;
         struct pmap *ci_curpm;          struct pmap *ci_curpm;
         struct proc *ci_fpuproc;          struct lwp *ci_fpulwp;
           struct lwp *ci_veclwp;
         struct pcb *ci_idle_pcb;        /* PA of our idle pcb */          struct pcb *ci_idle_pcb;        /* PA of our idle pcb */
         int ci_cpuid;          int ci_cpuid;
   
Line 75  struct cpu_info {
Line 88  struct cpu_info {
         int ci_ddbsave[8];          int ci_ddbsave[8];
         int ci_ipkdbsave[8];          int ci_ipkdbsave[8];
         int ci_disisave[4];          int ci_disisave[4];
           struct cache_info ci_ci;
           struct sysmon_envsys ci_sysmon;
           struct envsys_tre_data ci_tau_info;
         struct evcnt ci_ev_traps;       /* calls to trap() */          struct evcnt ci_ev_traps;       /* calls to trap() */
         struct evcnt ci_ev_kdsi;        /* kernel DSI traps */          struct evcnt ci_ev_kdsi;        /* kernel DSI traps */
         struct evcnt ci_ev_udsi;        /* user DSI traps */          struct evcnt ci_ev_udsi;        /* user DSI traps */
Line 89  struct cpu_info {
Line 105  struct cpu_info {
         struct evcnt ci_ev_scalls;      /* system call traps */          struct evcnt ci_ev_scalls;      /* system call traps */
         struct evcnt ci_ev_vec;         /* Altivec traps */          struct evcnt ci_ev_vec;         /* Altivec traps */
         struct evcnt ci_ev_vecsw;       /* Altivec context switches */          struct evcnt ci_ev_vecsw;       /* Altivec context switches */
           struct evcnt ci_ev_umchk;       /* user MCHK events */
 };  };
   
 #ifdef MULTIPROCESSOR  #ifdef MULTIPROCESSOR
 static __inline int  static __inline int
 cpu_number()  cpu_number(void)
 {  {
         int pir;          int pir;
   
Line 102  cpu_number()
Line 119  cpu_number()
 }  }
   
 static __inline struct cpu_info *  static __inline struct cpu_info *
 curcpu()  curcpu(void)
 {  {
         struct cpu_info *ci;          struct cpu_info *ci;
   
Line 110  curcpu()
Line 127  curcpu()
         return ci;          return ci;
 }  }
   
   void    cpu_boot_secondary_processors(void);
   
 extern struct cpu_info cpu_info[];  extern struct cpu_info cpu_info[];
   
 #define CPU_IS_PRIMARY(ci)      ((ci)->ci_cpuid == 0)  #define CPU_IS_PRIMARY(ci)      ((ci)->ci_cpuid == 0)
 #define curproc                 curcpu()->ci_curproc  #define curlwp                  curcpu()->ci_curlwp
 #define fpuproc                 curcpu()->ci_fpuproc  
 #define curpcb                  curcpu()->ci_curpcb  #define curpcb                  curcpu()->ci_curpcb
 #define curpm                   curcpu()->ci_curpm  #define curpm                   curcpu()->ci_curpm
 #define want_resched            curcpu()->ci_want_resched  #define want_resched            curcpu()->ci_want_resched
 #define astpending              curcpu()->ci_astpending  #define astpending              curcpu()->ci_astpending
 #define intr_depth              curcpu()->ci_intrdepth  #define intr_depth              curcpu()->ci_intrdepth
   
   #define CPU_INFO_ITERATOR               int
   #define CPU_INFO_FOREACH(cii, ci)                                       \
           cii = 0, ci = &cpu_info[0]; cii < CPU_MAXNUM; cii++, ci++
   
 #else  #else
 extern struct cpu_info cpu_info_store;  extern struct cpu_info cpu_info_store;
 extern volatile int want_resched;  extern volatile int want_resched;
Line 130  extern volatile int intr_depth;
Line 152  extern volatile int intr_depth;
 #define curcpu()                (&cpu_info_store)  #define curcpu()                (&cpu_info_store)
 #define cpu_number()            0  #define cpu_number()            0
   
   #define CPU_INFO_ITERATOR               int
   #define CPU_INFO_FOREACH(cii, ci)                                       \
           cii = 0, ci = curcpu(); ci != NULL; ci = NULL
   
 #endif /* MULTIPROCESSOR */  #endif /* MULTIPROCESSOR */
   
   static __inline register_t
   mfmsr(void)
   {
           register_t msr;
   
           asm volatile ("mfmsr %0" : "=r"(msr));
           return msr;
   }
   
   static __inline void
   mtmsr(register_t msr)
   {
   
           asm volatile ("mtmsr %0" : : "r"(msr));
   }
   
   static __inline uint32_t
   mftbl(void)
   {
           uint32_t tbl;
   
           asm volatile ("mftbl %0" : "=r"(tbl));
           return tbl;
   }
   
   static __inline uint64_t
   mftb(void)
   {
           uint64_t tb;
           int tmp;
   
           asm volatile ("
   1:      mftbu %0        \n\
           mftb %0+1       \n\
           mftbu %1        \n\
           cmplw %0,%1     \n\
           bne- 1b"
               : "=r"(tb), "=r"(tmp));
           return tb;
   }
   
   static __inline uint32_t
   mfpvr(void)
   {
           uint32_t pvr;
   
           asm volatile ("mfpvr %0" : "=r"(pvr));
           return (pvr);
   }
   
 #define CLKF_USERMODE(frame)    (((frame)->srr1 & PSL_PR) != 0)  #define CLKF_USERMODE(frame)    (((frame)->srr1 & PSL_PR) != 0)
 #define CLKF_BASEPRI(frame)     ((frame)->pri == 0)  #define CLKF_BASEPRI(frame)     ((frame)->pri == 0)
 #define CLKF_PC(frame)          ((frame)->srr0)  #define CLKF_PC(frame)          ((frame)->srr0)
 #define CLKF_INTR(frame)        ((frame)->depth > 0)  #define CLKF_INTR(frame)        ((frame)->depth > 0)
   
 #define PROC_PC(p)              (trapframe(p)->srr0)  #define LWP_PC(l)               (trapframe(l)->srr0)
   
 #define cpu_swapout(p)  #define cpu_swapout(p)
 #define cpu_wait(p)  #define cpu_wait(p)
   #define cpu_proc_fork(p1, p2)
   
 extern int powersave;  extern int powersave;
 extern int cpu_timebase;  extern int cpu_timebase;
 extern int cpu_printfataltraps;  extern int cpu_printfataltraps;
   extern char cpu_model[];
   
   struct cpu_info *cpu_attach_common(struct device *, int);
   void cpu_setup(struct device *, struct cpu_info *);
   void cpu_identify(char *, size_t);
   void delay (unsigned int);
   void cpu_probe_cache(void);
   void dcache_flush_page(vaddr_t);
   void icache_flush_page(vaddr_t);
   void dcache_flush(vaddr_t, vsize_t);
   void icache_flush(vaddr_t, vsize_t);
   
 extern struct cpu_info *cpu_attach_common(struct device *, int);  
 extern void cpu_identify(char *, size_t);  
 extern void delay (unsigned int);  
 #define DELAY(n)                delay(n)  #define DELAY(n)                delay(n)
   
 #define need_resched(ci)        (want_resched = 1, astpending = 1)  #define need_resched(ci)        (want_resched = 1, astpending = 1)
 #define need_proftick(p)        ((p)->p_flag |= P_OWEUPC, astpending = 1)  #define need_proftick(p)        ((p)->p_flag |= P_OWEUPC, astpending = 1)
 #define signotify(p)            (astpending = 1)  #define signotify(p)            (astpending = 1)
   
   #ifdef PPC_MPC6XX
   void mpc6xx_init(void (*)(void));
   void mpc6xx_startup(const char *);
   void mpc6xx_dumpsys(void);
   void mpc6xx_install_extint(void (*)(void));
   void *mapiodev(paddr_t, psize_t);
   paddr_t kvtop(caddr_t);
   void softnet(int);
   
   extern paddr_t msgbuf_paddr;
   extern int cpu_altivec;
   #endif
   
 #endif /* _KERNEL */  #endif /* _KERNEL */
   
 #if defined(_KERNEL) || defined(_STANDALONE)  #if defined(_KERNEL) || defined(_STANDALONE)
Line 163  extern void delay (unsigned int);
Line 261  extern void delay (unsigned int);
 #endif  #endif
 #endif  #endif
   
 void __syncicache(void *, int);  void __syncicache(void *, size_t);
   
 /*  /*
  * CTL_MACHDEP definitions.   * CTL_MACHDEP definitions.
Line 172  void __syncicache(void *, int);
Line 270  void __syncicache(void *, int);
 #define CPU_TIMEBASE            2  #define CPU_TIMEBASE            2
 #define CPU_CPUTEMP             3  #define CPU_CPUTEMP             3
 #define CPU_PRINTFATALTRAPS     4  #define CPU_PRINTFATALTRAPS     4
 #define CPU_MAXID               5  #define CPU_CACHEINFO           5
   #define CPU_ALTIVEC             6
   #define CPU_MODEL               7
   #define CPU_POWERSAVE           8
   #define CPU_MAXID               9
   
 #define CTL_MACHDEP_NAMES { \  #define CTL_MACHDEP_NAMES { \
         { 0, 0 }, \          { 0, 0 }, \
Line 180  void __syncicache(void *, int);
Line 282  void __syncicache(void *, int);
         { "timebase", CTLTYPE_INT }, \          { "timebase", CTLTYPE_INT }, \
         { "cputempature", CTLTYPE_INT }, \          { "cputempature", CTLTYPE_INT }, \
         { "printfataltraps", CTLTYPE_INT }, \          { "printfataltraps", CTLTYPE_INT }, \
           { "cacheinfo", CTLTYPE_STRUCT }, \
           { "altivec", CTLTYPE_INT }, \
           { "model", CTLTYPE_STRING }, \
           { "powersave", CTLTYPE_INT }, \
 }  }
   
 #endif  /* _POWERPC_CPU_H_ */  #endif  /* _POWERPC_CPU_H_ */

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.10.6.11

CVSweb <webmaster@jp.NetBSD.org>