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 {
2014-05-21 11:42:10 +02:00
unsigned long asid_cache ;
2005-04-16 15:20:36 -07:00
/*
* Capability and feature descriptor structure for MIPS CPU
*/
2005-05-05 16:45:59 +00:00
unsigned long ases ;
2014-07-14 10:14:02 +01:00
unsigned long long options ;
2014-05-21 11:42:10 +02:00
unsigned int udelay_val ;
2005-04-16 15:20:36 -07:00
unsigned int processor_id ;
unsigned int fpu_id ;
2014-01-27 15:23:10 +00:00
unsigned int msa_id ;
2005-04-16 15:20:36 -07:00
unsigned int cputype ;
int isa_level ;
int tlbsize ;
2013-11-14 16:12:31 +00:00
int tlbsizevtlb ;
int tlbsizeftlbsets ;
int tlbsizeftlbways ;
2013-01-22 12:59:30 +01:00
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 */
int srsets ; /* Shadow register sets */
2014-06-26 11:41:26 +08:00
int package ; /* physical package number */
2007-03-02 20:42:04 +00:00
int core ; /* physical core number */
2010-02-02 08:52:20 -08:00
# ifdef CONFIG_64BIT
2013-01-22 12:59:30 +01:00
int vmbits ; /* Virtual memory size in bits */
2010-02-02 08:52:20 -08:00
# endif
2014-05-23 16:29:44 +02:00
# ifdef CONFIG_MIPS_MT_SMP
2006-04-05 09:45:45 +01:00
/*
2014-05-23 16:29:44 +02:00
* There is not necessarily a 1 : 1 mapping of VPE num to CPU number
* in particular on multi - core systems .
2006-04-05 09:45:45 +01:00
*/
2013-01-22 12:59:30 +01:00
int vpe_id ; /* Virtual Processor number */
2007-03-02 20:42:04 +00:00
# endif
2013-01-22 12:59:30 +01: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 ] ;
2010-12-21 14:19:09 -08:00
unsigned int kscratch_mask ; /* Usable KScratch mask. */
2014-07-18 10:51:32 +01:00
/*
* Cache Coherency attribute for write - combine memory writes .
* ( shifted by _CACHE_SHIFT )
*/
unsigned int writecombine ;
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()]
2013-09-17 13:58:12 +02:00
# define boot_cpu_data cpu_data[0]
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()]
2013-10-16 17:10:07 +02:00
struct seq_file ;
struct notifier_block ;
extern int register_proc_cpuinfo_notifier ( struct notifier_block * nb ) ;
extern int proc_cpuinfo_notifier_call_chain ( unsigned long val , void * v ) ;
# define proc_cpuinfo_notifier(fn, pri) \
( { \
static struct notifier_block fn # # _nb = { \
. notifier_call = fn , \
. priority = pri \
} ; \
\
register_proc_cpuinfo_notifier ( & fn # # _nb ) ; \
} )
struct proc_cpuinfo_notifier_args {
struct seq_file * m ;
unsigned long n ;
} ;
2014-05-23 16:29:44 +02:00
# ifdef CONFIG_MIPS_MT_SMP
2014-03-24 10:19:24 +00:00
# define cpu_vpe_id(cpuinfo) ((cpuinfo)->vpe_id)
# else
2014-07-09 12:48:20 +01:00
# define cpu_vpe_id(cpuinfo) ({ (void)cpuinfo; 0; })
2014-03-24 10:19:24 +00:00
# endif
2005-04-16 15:20:36 -07:00
# endif /* __ASM_CPU_INFO_H */