2005-04-17 02:20:36 +04:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1994 Waldorf GMBH
* Copyright ( C ) 1995 , 1996 , 1997 , 1998 , 1999 , 2001 , 2002 , 2003 Ralf Baechle
* Copyright ( C ) 1996 Paul M . Antoine
* Copyright ( C ) 1999 , 2000 Silicon Graphics , Inc .
2005-05-05 20:45:59 +04:00
* Copyright ( C ) 2004 Maciej W . Rozycki
2005-04-17 02:20:36 +04:00
*/
# ifndef __ASM_CPU_INFO_H
# define __ASM_CPU_INFO_H
# include <asm/cache.h>
/*
* Descriptor for a cache
*/
struct cache_desc {
unsigned int waysize ; /* Bytes per way */
2006-11-30 04:14:45 +03:00
unsigned short sets ; /* Number of lines per set */
unsigned char ways ; /* Number of ways */
unsigned char linesz ; /* Size of line in bytes */
unsigned char waybit ; /* Bits to select in a cache set */
unsigned char flags ; /* Flags describing cache properties */
2005-04-17 02:20:36 +04:00
} ;
/*
* Flag definitions
*/
# define MIPS_CACHE_NOT_PRESENT 0x00000001
# define MIPS_CACHE_VTAG 0x00000002 /* Virtually tagged cache */
# define MIPS_CACHE_ALIASES 0x00000004 /* Cache could have aliases */
# define MIPS_CACHE_IC_F_DC 0x00000008 /* Ic can refill from D-cache */
# define MIPS_IC_SNOOPS_REMOTE 0x00000010 /* Ic snoops remote stores */
2006-03-13 12:23:03 +03:00
# define MIPS_CACHE_PINDEX 0x00000020 /* Physically indexed cache */
2005-04-17 02:20:36 +04:00
struct cpuinfo_mips {
unsigned long udelay_val ;
unsigned long asid_cache ;
/*
* Capability and feature descriptor structure for MIPS CPU
*/
unsigned long options ;
2005-05-05 20:45:59 +04:00
unsigned long ases ;
2005-04-17 02:20:36 +04:00
unsigned int processor_id ;
unsigned int fpu_id ;
unsigned int cputype ;
int isa_level ;
int tlbsize ;
struct cache_desc icache ; /* Primary I-cache */
struct cache_desc dcache ; /* Primary D or combined I/D cache */
struct cache_desc scache ; /* Secondary cache */
struct cache_desc tcache ; /* Tertiary/split secondary cache */
2007-11-08 21:02:29 +03:00
int srsets ; /* Shadow register sets */
2007-03-02 23:42:04 +03:00
int core ; /* physical core number */
2006-04-05 12:45:45 +04:00
# if defined(CONFIG_MIPS_MT_SMTC)
/*
* In the MIPS MT " SMTC " model , each TC is considered
* to be a " CPU " for the purposes of scheduling , but
* exception resources , ASID spaces , etc , are common
* to all TCs within the same VPE .
*/
int vpe_id ; /* Virtual Processor number */
# endif /* CONFIG_MIPS_MT */
2007-03-02 23:42:04 +03:00
# ifdef CONFIG_MIPS_MT_SMTC
int tc_id ; /* Thread Context number */
# endif
2005-04-17 02:20:36 +04:00
void * data ; /* Additional data */
} __attribute__ ( ( aligned ( SMP_CACHE_BYTES ) ) ) ;
extern struct cpuinfo_mips cpu_data [ ] ;
# define current_cpu_data cpu_data[smp_processor_id()]
2007-03-09 19:07:45 +03:00
# define raw_current_cpu_data cpu_data[raw_smp_processor_id()]
2005-04-17 02:20:36 +04:00
extern void cpu_probe ( void ) ;
extern void cpu_report ( void ) ;
2007-10-12 02:46:17 +04:00
extern const char * __cpu_name [ ] ;
# define cpu_name_string() __cpu_name[smp_processor_id()]
2005-04-17 02:20:36 +04:00
# endif /* __ASM_CPU_INFO_H */