2005-04-16 15:20:36 -07:00
# include <linux/interrupt.h>
2006-09-30 23:29:15 -07:00
# include <linux/io.h>
2005-04-16 15:20:36 -07:00
2006-09-30 23:29:15 -07:00
# include <asm/pgtable.h>
2005-04-16 15:20:36 -07:00
/* Prototypes of functions used across modules here in this directory. */
# define vucp volatile unsigned char *
# define vusp volatile unsigned short *
# define vip volatile int *
# define vuip volatile unsigned int *
# define vulp volatile unsigned long *
struct pt_regs ;
struct task_struct ;
struct pci_dev ;
struct pci_controller ;
/* core_apecs.c */
extern struct pci_ops apecs_pci_ops ;
extern void apecs_init_arch ( void ) ;
extern void apecs_pci_clr_err ( void ) ;
2009-03-31 15:23:36 -07:00
extern void apecs_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
extern void apecs_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
/* core_cia.c */
extern struct pci_ops cia_pci_ops ;
extern void cia_init_pci ( void ) ;
extern void cia_init_arch ( void ) ;
extern void pyxis_init_arch ( void ) ;
extern void cia_kill_arch ( int ) ;
2009-03-31 15:23:36 -07:00
extern void cia_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
extern void cia_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
/* core_irongate.c */
extern struct pci_ops irongate_pci_ops ;
extern int irongate_pci_clr_err ( void ) ;
extern void irongate_init_arch ( void ) ;
# define irongate_pci_tbi ((void *)0)
/* core_lca.c */
extern struct pci_ops lca_pci_ops ;
extern void lca_init_arch ( void ) ;
2009-03-31 15:23:36 -07:00
extern void lca_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
extern void lca_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
/* core_marvel.c */
extern struct pci_ops marvel_pci_ops ;
extern void marvel_init_arch ( void ) ;
extern void marvel_kill_arch ( int ) ;
2009-04-30 15:08:45 -07:00
extern void marvel_machine_check ( unsigned long , unsigned long ) ;
2005-04-16 15:20:36 -07:00
extern void marvel_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
extern int marvel_pa_to_nid ( unsigned long ) ;
extern int marvel_cpuid_to_nid ( int ) ;
extern unsigned long marvel_node_mem_start ( int ) ;
extern unsigned long marvel_node_mem_size ( int ) ;
extern struct _alpha_agp_info * marvel_agp_info ( void ) ;
struct io7 * marvel_find_io7 ( int pe ) ;
struct io7 * marvel_next_io7 ( struct io7 * prev ) ;
void io7_clear_errors ( struct io7 * io7 ) ;
/* core_mcpcia.c */
extern struct pci_ops mcpcia_pci_ops ;
extern void mcpcia_init_arch ( void ) ;
extern void mcpcia_init_hoses ( void ) ;
2009-03-31 15:23:36 -07:00
extern void mcpcia_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
extern void mcpcia_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
/* core_polaris.c */
extern struct pci_ops polaris_pci_ops ;
extern int polaris_read_config_dword ( struct pci_dev * , int , u32 * ) ;
extern int polaris_write_config_dword ( struct pci_dev * , int , u32 ) ;
extern void polaris_init_arch ( void ) ;
2009-03-31 15:23:36 -07:00
extern void polaris_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
# define polaris_pci_tbi ((void *)0)
/* core_t2.c */
extern struct pci_ops t2_pci_ops ;
extern void t2_init_arch ( void ) ;
extern void t2_kill_arch ( int ) ;
2009-03-31 15:23:36 -07:00
extern void t2_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
extern void t2_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
/* core_titan.c */
extern struct pci_ops titan_pci_ops ;
extern void titan_init_arch ( void ) ;
extern void titan_kill_arch ( int ) ;
2009-04-30 15:08:45 -07:00
extern void titan_machine_check ( unsigned long , unsigned long ) ;
2005-04-16 15:20:36 -07:00
extern void titan_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
extern struct _alpha_agp_info * titan_agp_info ( void ) ;
/* core_tsunami.c */
extern struct pci_ops tsunami_pci_ops ;
extern void tsunami_init_arch ( void ) ;
extern void tsunami_kill_arch ( int ) ;
2009-03-31 15:23:36 -07:00
extern void tsunami_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
extern void tsunami_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
/* core_wildfire.c */
extern struct pci_ops wildfire_pci_ops ;
extern void wildfire_init_arch ( void ) ;
extern void wildfire_kill_arch ( int ) ;
2009-03-31 15:23:36 -07:00
extern void wildfire_machine_check ( unsigned long vector , unsigned long la_ptr ) ;
2005-04-16 15:20:36 -07:00
extern void wildfire_pci_tbi ( struct pci_controller * , dma_addr_t , dma_addr_t ) ;
extern int wildfire_pa_to_nid ( unsigned long ) ;
extern int wildfire_cpuid_to_nid ( int ) ;
extern unsigned long wildfire_node_mem_start ( int ) ;
extern unsigned long wildfire_node_mem_size ( int ) ;
ALPHA: support graphics on non-zero PCI domains
This code replaces earlier and incomplete handling of graphics on non-zero PCI
domains (aka hoses or peer PCI buses).
An option (CONFIG_VGA_HOSE) is set TRUE if configuring a GENERIC kernel, or a
kernel for MARVEL, TITAN, or TSUNAMI machines, as these are the machines whose
SRM consoles are capable of configuring and handling graphics options on
non-zero hoses. All other machines have the option set FALSE.
A routine, "find_console_vga_hose()", is used to find the graphics device
which the machine's firmware believes is the console device, and it sets a
global (pci_vga_hose) for later use in managing access to the device. This is
called in "init_arch" on TITAN and TSUNAMI machines; MARVEL machines use a
custom version of this routine because of extra complexity.
A routine, "locate_and_init_vga()", is used to find the graphics device and
set a global (pci_vga_hose) for later use in managing access to the device, in
the case where "find_console_vga_hose" has failed.
Various adjustments are made to the ioremap and ioportmap routines for
detecting and translating "legacy" VGA register and memory references to the
real PCI domain.
[akpm@linux-foundation.org: don't statically init bss]
[akpm@linux-foundation.org: build fix]
Signed-off-by: Jay Estabrook <jay.estabrook@hp.com>
Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Richard Henderson <rth@twiddle.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-06-01 00:47:03 -07:00
/* console.c */
# ifdef CONFIG_VGA_HOSE
extern void find_console_vga_hose ( void ) ;
extern void locate_and_init_vga ( void * ( * ) ( void * , void * ) ) ;
# else
static inline void find_console_vga_hose ( void ) { }
static inline void locate_and_init_vga ( void * ( * sel_func ) ( void * , void * ) ) { }
# endif
2005-04-16 15:20:36 -07:00
/* setup.c */
extern unsigned long srm_hae ;
extern int boot_cpuid ;
# ifdef CONFIG_VERBOSE_MCHECK
extern unsigned long alpha_verbose_mcheck ;
# endif
/* srmcons.c */
# if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM)
extern void register_srm_console ( void ) ;
extern void unregister_srm_console ( void ) ;
# else
# define register_srm_console()
# define unregister_srm_console()
# endif
/* smp.c */
extern void setup_smp ( void ) ;
extern void handle_ipi ( struct pt_regs * ) ;
extern void smp_percpu_timer_interrupt ( struct pt_regs * ) ;
/* bios32.c */
/* extern void reset_for_srm(void); */
/* time.c */
2006-10-07 14:17:31 +01:00
extern irqreturn_t timer_interrupt ( int irq , void * dev ) ;
2005-04-16 15:20:36 -07:00
extern void common_init_rtc ( void ) ;
extern unsigned long est_cycle_freq ;
2009-01-15 13:51:19 -08:00
extern unsigned int common_get_rtc_time ( struct rtc_time * time ) ;
extern int common_set_rtc_time ( struct rtc_time * time ) ;
2005-04-16 15:20:36 -07:00
/* smc37c93x.c */
extern void SMC93x_Init ( void ) ;
/* smc37c669.c */
extern void SMC669_Init ( int ) ;
/* es1888.c */
extern void es1888_init ( void ) ;
/* ../lib/fpreg.c */
extern void alpha_write_fp_reg ( unsigned long reg , unsigned long val ) ;
extern unsigned long alpha_read_fp_reg ( unsigned long reg ) ;
/* head.S */
extern void wrmces ( unsigned long mces ) ;
extern void cserve_ena ( unsigned long ) ;
extern void cserve_dis ( unsigned long ) ;
extern void __smp_callin ( unsigned long ) ;
/* entry.S */
extern void entArith ( void ) ;
extern void entIF ( void ) ;
extern void entInt ( void ) ;
extern void entMM ( void ) ;
extern void entSys ( void ) ;
extern void entUna ( void ) ;
extern void entDbg ( void ) ;
/* ptrace.c */
extern int ptrace_set_bpt ( struct task_struct * child ) ;
extern int ptrace_cancel_bpt ( struct task_struct * child ) ;
/* traps.c */
extern void dik_show_regs ( struct pt_regs * regs , unsigned long * r9_15 ) ;
extern void die_if_kernel ( char * , struct pt_regs * , long , unsigned long * ) ;
/* sys_titan.c */
2006-10-08 14:45:28 +01:00
extern void titan_dispatch_irqs ( u64 ) ;
2005-04-16 15:20:36 -07:00
/* ../mm/init.c */
extern void switch_to_system_map ( void ) ;
extern void srm_paging_stop ( void ) ;
2006-09-30 23:29:15 -07:00
static inline int
__alpha_remap_area_pages ( unsigned long address , unsigned long phys_addr ,
unsigned long size , unsigned long flags )
{
pgprot_t prot ;
prot = __pgprot ( _PAGE_VALID | _PAGE_ASM | _PAGE_KRE
| _PAGE_KWE | flags ) ;
return ioremap_page_range ( address , address + size , phys_addr , prot ) ;
}
2005-04-16 15:20:36 -07:00
/* irq.c */
# ifdef CONFIG_SMP
# define mcheck_expected(cpu) (cpu_data[cpu].mcheck_expected)
# define mcheck_taken(cpu) (cpu_data[cpu].mcheck_taken)
# define mcheck_extra(cpu) (cpu_data[cpu].mcheck_extra)
# else
extern struct mcheck_info
{
unsigned char expected __attribute__ ( ( aligned ( 8 ) ) ) ;
unsigned char taken ;
unsigned char extra ;
} __mcheck_info ;
# define mcheck_expected(cpu) (*((void)(cpu), &__mcheck_info.expected))
# define mcheck_taken(cpu) (*((void)(cpu), &__mcheck_info.taken))
# define mcheck_extra(cpu) (*((void)(cpu), &__mcheck_info.extra))
# endif
extern void process_mcheck_info ( unsigned long vector , unsigned long la_ptr ,
2006-10-08 14:44:38 +01:00
const char * machine , int expected ) ;