11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __ALPHA_MACHVEC_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __ALPHA_MACHVEC_H 1
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	This file gets pulled in by asm/io.h from user space. We don't
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	want most of this escaping.
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The following structure vectors all of the I/O and IRQ manipulation
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   from the generic kernel to the hardware specific backend.  */
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct task_struct;
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct mm_struct;
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct vm_area_struct;
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct linux_hose_info;
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct pci_dev;
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct pci_ops;
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct pci_controller;
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct _alpha_agp_info;
245f7dc5d75076fd1c1fc6bc09f2467509d20db24aIvan Kokshayskystruct rtc_time;
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct alpha_machine_vector
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* This "belongs" down below with the rest of the runtime
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	   variables, but it is convenient for entry.S if these
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	   two slots are at the beginning of the struct.  */
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long hae_cache;
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long *hae_register;
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nr_irqs;
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rtc_port;
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int max_asn;
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long max_isa_dma_address;
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long irq_probe_mask;
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long iack_sc;
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long min_io_address;
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long min_mem_address;
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long pci_dac_offset;
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_pci_tbi)(struct pci_controller *hose,
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			   dma_addr_t start, dma_addr_t end);
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int (*mv_ioread8)(void __iomem *);
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int (*mv_ioread16)(void __iomem *);
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int (*mv_ioread32)(void __iomem *);
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_iowrite8)(u8, void __iomem *);
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_iowrite16)(u16, void __iomem *);
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_iowrite32)(u32, void __iomem *);
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 (*mv_readb)(const volatile void __iomem *);
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 (*mv_readw)(const volatile void __iomem *);
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 (*mv_readl)(const volatile void __iomem *);
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u64 (*mv_readq)(const volatile void __iomem *);
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_writeb)(u8, volatile void __iomem *);
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_writew)(u16, volatile void __iomem *);
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_writel)(u32, volatile void __iomem *);
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_writeq)(u64, volatile void __iomem *);
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void __iomem *(*mv_ioportmap)(unsigned long);
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void __iomem *(*mv_ioremap)(unsigned long, unsigned long);
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_iounmap)(volatile void __iomem *);
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int (*mv_is_ioaddr)(unsigned long);
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int (*mv_is_mmio)(const volatile void __iomem *);
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_switch_mm)(struct mm_struct *, struct mm_struct *,
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			     struct task_struct *);
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_activate_mm)(struct mm_struct *, struct mm_struct *);
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_flush_tlb_current)(struct mm_struct *);
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*mv_flush_tlb_current_page)(struct mm_struct * mm,
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					  struct vm_area_struct *vma,
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					  unsigned long addr);
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*update_irq_hw)(unsigned long, unsigned long, int);
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*ack_irq)(unsigned long);
827ca56053b29633ef08b14e5ca16c663363edac36Al Viro	void (*device_interrupt)(unsigned long vector);
835f0e3da6e186598bbd2569410ab60fa645ba00c9Randy Dunlap	void (*machine_check)(unsigned long vector, unsigned long la);
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*smp_callin)(void);
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*init_arch)(void);
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*init_irq)(void);
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*init_rtc)(void);
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*init_pci)(void);
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*kill_arch)(int);
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 (*pci_swizzle)(struct pci_dev *, u8 *);
93bf362f750bea1372aff3b5c405b50560a1b28981Al Viro	int (*pci_map_irq)(const struct pci_dev *, u8, u8);
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_ops *pci_ops;
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct _alpha_agp_info *(*agp_info)(void);
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
985f7dc5d75076fd1c1fc6bc09f2467509d20db24aIvan Kokshaysky	unsigned int (*rtc_get_time)(struct rtc_time *);
995f7dc5d75076fd1c1fc6bc09f2467509d20db24aIvan Kokshaysky	int (*rtc_set_time)(struct rtc_time *);
1005f7dc5d75076fd1c1fc6bc09f2467509d20db24aIvan Kokshaysky
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	const char *vector_name;
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* NUMA information */
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int (*pa_to_nid)(unsigned long);
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int (*cpuid_to_nid)(int);
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long (*node_mem_start)(int);
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long (*node_mem_size)(int);
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* System specific parameters.  */
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	union {
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    struct {
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		unsigned long gru_int_req_bits;
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    } cia;
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    struct {
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		unsigned long gamma_bias;
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    } t2;
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    struct {
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		unsigned int route_tab;
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    } sio;
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} sys;
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct alpha_machine_vector alpha_mv;
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_ALPHA_GENERIC
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int alpha_using_srm;
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_ALPHA_SRM
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define alpha_using_srm 1
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define alpha_using_srm 0
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* GENERIC */
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __ALPHA_MACHVEC_H */
139