2005-04-16 15:20:36 -07: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 16:45:59 +00:00
* Copyright ( C ) 2004 Maciej W . Rozycki
2005-04-16 15:20:36 -07:00
*/
# ifndef __ASM_CPU_INFO_H
# define __ASM_CPU_INFO_H
2008-09-23 00:05:54 -07:00
# include <linux/types.h>
2005-04-16 15:20:36 -07:00
# include <asm/cache.h>
/*
* Descriptor for a cache
*/
struct cache_desc {
unsigned int waysize ; /* Bytes per way */
2006-11-30 01:14:45 +00: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-16 15:20:36 -07: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 18:23:03 +09:00
# define MIPS_CACHE_PINDEX 0x00000020 /* Physically indexed cache */
2005-04-16 15:20:36 -07:00
struct cpuinfo_mips {
2009-02-28 09:44:28 +00:00
unsigned int udelay_val ;
unsigned int asid_cache ;
2005-04-16 15:20:36 -07:00
/*
* Capability and feature descriptor structure for MIPS CPU
*/
unsigned long options ;
2005-05-05 16:45:59 +00:00
unsigned long ases ;
2005-04-16 15:20:36 -07: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 18:02:29 +00:00
int srsets ; /* Shadow register sets */
2007-03-02 20:42:04 +00:00
int core ; /* physical core number */
2008-05-16 17:29:54 -07:00
# if defined(CONFIG_MIPS_MT_SMP) || defined(CONFIG_MIPS_MT_SMTC)
2006-04-05 09:45:45 +01:00
/*
* 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 */
2008-05-16 17:29:54 -07:00
# endif
2007-03-02 20:42:04 +00:00
# ifdef CONFIG_MIPS_MT_SMTC
int tc_id ; /* Thread Context number */
# endif
2005-04-16 15:20:36 -07:00
void * data ; /* Additional data */
2008-09-23 00:05:54 -07:00
unsigned int watch_reg_count ; /* Number that exist */
unsigned int watch_reg_use_cnt ; /* Usable by ptrace */
# define NUM_WATCH_REGS 4
u16 watch_reg_masks [ NUM_WATCH_REGS ] ;
2005-04-16 15:20:36 -07:00
} __attribute__ ( ( aligned ( SMP_CACHE_BYTES ) ) ) ;
extern struct cpuinfo_mips cpu_data [ ] ;
# define current_cpu_data cpu_data[smp_processor_id()]
2007-03-10 01:07:45 +09:00
# define raw_current_cpu_data cpu_data[raw_smp_processor_id()]
2005-04-16 15:20:36 -07:00
extern void cpu_probe ( void ) ;
extern void cpu_report ( void ) ;
2007-10-11 23:46:17 +01:00
extern const char * __cpu_name [ ] ;
# define cpu_name_string() __cpu_name[smp_processor_id()]
2005-04-16 15:20:36 -07:00
# endif /* __ASM_CPU_INFO_H */