2010-09-17 18:03:43 +02:00
# ifndef _ASM_X86_AMD_NB_H
# define _ASM_X86_AMD_NB_H
2006-06-26 13:56:40 +02:00
2012-01-05 14:27:19 -07:00
# include <linux/ioport.h>
2006-06-26 13:56:40 +02:00
# include <linux/pci.h>
2011-01-10 16:20:23 +00:00
struct amd_nb_bus_dev_range {
u8 bus ;
u8 dev_base ;
u8 dev_limit ;
} ;
2011-02-09 08:26:53 +00:00
extern const struct pci_device_id amd_nb_misc_ids [ ] ;
2011-01-10 16:20:23 +00:00
extern const struct amd_nb_bus_dev_range amd_nb_bus_dev_ranges [ ] ;
2006-06-26 13:56:40 +02:00
2011-03-03 12:59:32 +01:00
extern bool early_is_amd_nb ( u32 value ) ;
2012-01-05 14:27:19 -07:00
extern struct resource * amd_get_mmconfig_range ( struct resource * res ) ;
2010-10-29 17:14:31 +02:00
extern int amd_cache_northbridges ( void ) ;
2010-10-29 17:14:30 +02:00
extern void amd_flush_garts ( void ) ;
2011-02-16 12:13:06 +01:00
extern int amd_numa_init ( void ) ;
2011-02-07 18:10:39 +01:00
extern int amd_get_subcaches ( int ) ;
extern int amd_set_subcaches ( int , int ) ;
2006-06-26 13:56:40 +02:00
2011-07-24 09:46:09 +00:00
struct amd_l3_cache {
unsigned indices ;
u8 subcaches [ 4 ] ;
} ;
2012-05-02 17:16:59 +02:00
struct threshold_block {
unsigned int block ;
unsigned int bank ;
unsigned int cpu ;
u32 address ;
u16 interrupt_enable ;
bool interrupt_capable ;
u16 threshold_limit ;
struct kobject kobj ;
struct list_head miscj ;
} ;
struct threshold_bank {
struct kobject * kobj ;
struct threshold_block * blocks ;
/* initialized to the number of CPUs on the node sharing this bank */
atomic_t cpus ;
} ;
2010-10-29 17:14:31 +02:00
struct amd_northbridge {
struct pci_dev * misc ;
2011-01-24 16:05:42 +01:00
struct pci_dev * link ;
2011-07-24 09:46:09 +00:00
struct amd_l3_cache l3_cache ;
2012-05-02 17:16:59 +02:00
struct threshold_bank * bank4 ;
2010-10-29 17:14:31 +02:00
} ;
2010-10-29 17:14:30 +02:00
struct amd_northbridge_info {
2010-09-17 18:02:54 +02:00
u16 num ;
2010-10-29 17:14:31 +02:00
u64 flags ;
struct amd_northbridge * nb ;
2010-09-17 18:02:54 +02:00
} ;
2010-10-29 17:14:30 +02:00
extern struct amd_northbridge_info amd_northbridges ;
2010-09-17 18:02:54 +02:00
2011-03-03 12:59:32 +01:00
# define AMD_NB_GART BIT(0)
# define AMD_NB_L3_INDEX_DISABLE BIT(1)
# define AMD_NB_L3_PARTITIONING BIT(2)
2010-10-29 17:14:31 +02:00
2010-09-17 18:03:43 +02:00
# ifdef CONFIG_AMD_NB
2010-04-24 09:56:53 +02:00
2011-03-03 12:59:32 +01:00
static inline u16 amd_nb_num ( void )
2009-04-14 23:04:37 +05:30
{
2010-10-29 17:14:31 +02:00
return amd_northbridges . num ;
2009-04-14 23:04:37 +05:30
}
2010-04-24 09:56:53 +02:00
2011-03-03 12:59:32 +01:00
static inline bool amd_nb_has_feature ( unsigned feature )
2010-10-29 17:14:31 +02:00
{
return ( ( amd_northbridges . flags & feature ) = = feature ) ;
}
2010-04-24 09:56:53 +02:00
2010-10-29 17:14:31 +02:00
static inline struct amd_northbridge * node_to_amd_nb ( int node )
2009-04-14 23:04:37 +05:30
{
2010-10-29 17:14:31 +02:00
return ( node < amd_northbridges . num ) ? & amd_northbridges . nb [ node ] : NULL ;
2009-04-14 23:04:37 +05:30
}
2010-10-29 17:14:31 +02:00
# else
# define amd_nb_num(x) 0
# define amd_nb_has_feature(x) false
# define node_to_amd_nb(x) NULL
2009-04-09 15:16:17 +02:00
# endif
2010-09-17 18:03:43 +02:00
# endif /* _ASM_X86_AMD_NB_H */