1/* 2 * Machine vector for IA-64. 3 * 4 * Copyright (C) 1999 Silicon Graphics, Inc. 5 * Copyright (C) Srinivasa Thirumalachar <sprasad@engr.sgi.com> 6 * Copyright (C) Vijay Chander <vijay@engr.sgi.com> 7 * Copyright (C) 1999-2001 Hewlett-Packard Co. 8 * David Mosberger-Tang <davidm@hpl.hp.com> 9 */ 10#ifndef _ASM_IA64_MACHVEC_H 11#define _ASM_IA64_MACHVEC_H 12 13#include <linux/config.h> 14#include <linux/types.h> 15 16/* forward declarations: */ 17struct pci_dev; 18struct pt_regs; 19struct scatterlist; 20struct irq_desc; 21struct page; 22 23typedef void ia64_mv_setup_t (char **); 24typedef void ia64_mv_cpu_init_t(void); 25typedef void ia64_mv_irq_init_t (void); 26typedef void ia64_mv_pci_fixup_t (int); 27typedef void ia64_mv_pci_enable_device_t (struct pci_dev *); 28typedef unsigned long ia64_mv_map_nr_t (unsigned long); 29typedef void ia64_mv_mca_init_t (void); 30typedef void ia64_mv_mca_handler_t (void); 31typedef void ia64_mv_cmci_handler_t (int, void *, struct pt_regs *); 32typedef void ia64_mv_log_print_t (void); 33typedef void ia64_mv_send_ipi_t (int, int, int, int); 34typedef void ia64_mv_global_tlb_purge_t (unsigned long, unsigned long, unsigned long); 35typedef struct irq_desc *ia64_mv_irq_desc (unsigned int); 36typedef u8 ia64_mv_irq_to_vector (u8); 37typedef unsigned int ia64_mv_local_vector_to_irq (u8 vector); 38 39/* PCI-DMA interface: */ 40typedef void ia64_mv_pci_dma_init (void); 41typedef void *ia64_mv_pci_alloc_consistent (struct pci_dev *, size_t, dma_addr_t *); 42typedef void ia64_mv_pci_free_consistent (struct pci_dev *, size_t, void *, dma_addr_t); 43typedef dma_addr_t ia64_mv_pci_map_single (struct pci_dev *, void *, size_t, int); 44typedef void ia64_mv_pci_unmap_single (struct pci_dev *, dma_addr_t, size_t, int); 45typedef int ia64_mv_pci_map_sg (struct pci_dev *, struct scatterlist *, int, int); 46typedef void ia64_mv_pci_unmap_sg (struct pci_dev *, struct scatterlist *, int, int); 47typedef void ia64_mv_pci_dma_sync_single (struct pci_dev *, dma_addr_t, size_t, int); 48typedef void ia64_mv_pci_dma_sync_sg (struct pci_dev *, struct scatterlist *, int, int); 49typedef unsigned long ia64_mv_pci_dma_address (struct scatterlist *); 50typedef int ia64_mv_pci_dma_supported (struct pci_dev *, u64); 51 52/* 53 * WARNING: The legacy I/O space is _architected_. Platforms are 54 * expected to follow this architected model (see Section 10.7 in the 55 * IA-64 Architecture Software Developer's Manual). Unfortunately, 56 * some broken machines do not follow that model, which is why we have 57 * to make the inX/outX operations part of the machine vector. 58 * Platform designers should follow the architected model whenever 59 * possible. 60 */ 61typedef unsigned int ia64_mv_inb_t (unsigned long); 62typedef unsigned int ia64_mv_inw_t (unsigned long); 63typedef unsigned int ia64_mv_inl_t (unsigned long); 64typedef void ia64_mv_outb_t (unsigned char, unsigned long); 65typedef void ia64_mv_outw_t (unsigned short, unsigned long); 66typedef void ia64_mv_outl_t (unsigned int, unsigned long); 67 68extern void machvec_noop (void); 69 70# if defined (CONFIG_IA64_HP_SIM) 71# include <asm/machvec_hpsim.h> 72# elif defined (CONFIG_IA64_DIG) 73# include <asm/machvec_dig.h> 74# elif defined (CONFIG_IA64_HP_ZX1) 75# include <asm/machvec_hpzx1.h> 76# elif defined (CONFIG_IA64_SGI_SN1) 77# include <asm/machvec_sn1.h> 78# elif defined (CONFIG_IA64_SGI_SN2) 79# include <asm/machvec_sn2.h> 80# elif defined (CONFIG_IA64_GENERIC) 81 82# ifdef MACHVEC_PLATFORM_HEADER 83# include MACHVEC_PLATFORM_HEADER 84# else 85# define platform_name ia64_mv.name 86# define platform_setup ia64_mv.setup 87# define platform_cpu_init ia64_mv.cpu_init 88# define platform_irq_init ia64_mv.irq_init 89# define platform_map_nr ia64_mv.map_nr 90# define platform_mca_init ia64_mv.mca_init 91# define platform_mca_handler ia64_mv.mca_handler 92# define platform_cmci_handler ia64_mv.cmci_handler 93# define platform_log_print ia64_mv.log_print 94# define platform_pci_fixup ia64_mv.pci_fixup 95# define platform_pci_enable_device ia64_mv.pci_enable_device 96# define platform_send_ipi ia64_mv.send_ipi 97# define platform_global_tlb_purge ia64_mv.global_tlb_purge 98# define platform_pci_dma_init ia64_mv.dma_init 99# define platform_pci_alloc_consistent ia64_mv.alloc_consistent 100# define platform_pci_free_consistent ia64_mv.free_consistent 101# define platform_pci_map_single ia64_mv.map_single 102# define platform_pci_unmap_single ia64_mv.unmap_single 103# define platform_pci_map_sg ia64_mv.map_sg 104# define platform_pci_unmap_sg ia64_mv.unmap_sg 105# define platform_pci_dma_sync_single ia64_mv.sync_single 106# define platform_pci_dma_sync_sg ia64_mv.sync_sg 107# define platform_pci_dma_address ia64_mv.dma_address 108# define platform_pci_dma_supported ia64_mv.dma_supported 109# define platform_irq_desc ia64_mv.irq_desc 110# define platform_irq_to_vector ia64_mv.irq_to_vector 111# define platform_local_vector_to_irq ia64_mv.local_vector_to_irq 112# define platform_inb ia64_mv.inb 113# define platform_inw ia64_mv.inw 114# define platform_inl ia64_mv.inl 115# define platform_outb ia64_mv.outb 116# define platform_outw ia64_mv.outw 117# define platform_outl ia64_mv.outl 118# endif 119 120struct ia64_machine_vector { 121 const char *name; 122 ia64_mv_setup_t *setup; 123 ia64_mv_cpu_init_t *cpu_init; 124 ia64_mv_irq_init_t *irq_init; 125 ia64_mv_pci_fixup_t *pci_fixup; 126 ia64_mv_pci_enable_device_t *pci_enable_device; 127 ia64_mv_map_nr_t *map_nr; 128 ia64_mv_mca_init_t *mca_init; 129 ia64_mv_mca_handler_t *mca_handler; 130 ia64_mv_cmci_handler_t *cmci_handler; 131 ia64_mv_log_print_t *log_print; 132 ia64_mv_send_ipi_t *send_ipi; 133 ia64_mv_global_tlb_purge_t *global_tlb_purge; 134 ia64_mv_pci_dma_init *dma_init; 135 ia64_mv_pci_alloc_consistent *alloc_consistent; 136 ia64_mv_pci_free_consistent *free_consistent; 137 ia64_mv_pci_map_single *map_single; 138 ia64_mv_pci_unmap_single *unmap_single; 139 ia64_mv_pci_map_sg *map_sg; 140 ia64_mv_pci_unmap_sg *unmap_sg; 141 ia64_mv_pci_dma_sync_single *sync_single; 142 ia64_mv_pci_dma_sync_sg *sync_sg; 143 ia64_mv_pci_dma_address *dma_address; 144 ia64_mv_pci_dma_supported *dma_supported; 145 ia64_mv_irq_desc *irq_desc; 146 ia64_mv_irq_to_vector *irq_to_vector; 147 ia64_mv_local_vector_to_irq *local_vector_to_irq; 148 ia64_mv_inb_t *inb; 149 ia64_mv_inw_t *inw; 150 ia64_mv_inl_t *inl; 151 ia64_mv_outb_t *outb; 152 ia64_mv_outw_t *outw; 153 ia64_mv_outl_t *outl; 154}; 155 156#define MACHVEC_INIT(name) \ 157{ \ 158 #name, \ 159 platform_setup, \ 160 platform_cpu_init, \ 161 platform_irq_init, \ 162 platform_pci_fixup, \ 163 platform_pci_enable_device, \ 164 platform_map_nr, \ 165 platform_mca_init, \ 166 platform_mca_handler, \ 167 platform_cmci_handler, \ 168 platform_log_print, \ 169 platform_send_ipi, \ 170 platform_global_tlb_purge, \ 171 platform_pci_dma_init, \ 172 platform_pci_alloc_consistent, \ 173 platform_pci_free_consistent, \ 174 platform_pci_map_single, \ 175 platform_pci_unmap_single, \ 176 platform_pci_map_sg, \ 177 platform_pci_unmap_sg, \ 178 platform_pci_dma_sync_single, \ 179 platform_pci_dma_sync_sg, \ 180 platform_pci_dma_address, \ 181 platform_pci_dma_supported, \ 182 platform_irq_desc, \ 183 platform_irq_to_vector, \ 184 platform_local_vector_to_irq, \ 185 platform_inb, \ 186 platform_inw, \ 187 platform_inl, \ 188 platform_outb, \ 189 platform_outw, \ 190 platform_outl \ 191} 192 193extern struct ia64_machine_vector ia64_mv; 194extern void machvec_init (const char *name); 195 196# else 197# error Unknown configuration. Update asm-ia64/machvec.h. 198# endif /* CONFIG_IA64_GENERIC */ 199 200/* 201 * Declare default routines which aren't declared anywhere else: 202 */ 203extern ia64_mv_pci_dma_init swiotlb_init; 204extern ia64_mv_pci_alloc_consistent swiotlb_alloc_consistent; 205extern ia64_mv_pci_free_consistent swiotlb_free_consistent; 206extern ia64_mv_pci_map_single swiotlb_map_single; 207extern ia64_mv_pci_unmap_single swiotlb_unmap_single; 208extern ia64_mv_pci_map_sg swiotlb_map_sg; 209extern ia64_mv_pci_unmap_sg swiotlb_unmap_sg; 210extern ia64_mv_pci_dma_sync_single swiotlb_sync_single; 211extern ia64_mv_pci_dma_sync_sg swiotlb_sync_sg; 212extern ia64_mv_pci_dma_address swiotlb_dma_address; 213extern ia64_mv_pci_dma_supported swiotlb_pci_dma_supported; 214 215/* 216 * Define default versions so we can extend machvec for new platforms without having 217 * to update the machvec files for all existing platforms. 218 */ 219#ifndef platform_setup 220# define platform_setup ((ia64_mv_setup_t *) machvec_noop) 221#endif 222#ifndef platform_cpu_init 223# define platform_cpu_init ((ia64_mv_cpu_init_t *) machvec_noop) 224#endif 225#ifndef platform_irq_init 226# define platform_irq_init ((ia64_mv_irq_init_t *) machvec_noop) 227#endif 228#ifndef platform_mca_init 229# define platform_mca_init ((ia64_mv_mca_init_t *) machvec_noop) 230#endif 231#ifndef platform_mca_handler 232# define platform_mca_handler ((ia64_mv_mca_handler_t *) machvec_noop) 233#endif 234#ifndef platform_cmci_handler 235# define platform_cmci_handler ((ia64_mv_cmci_handler_t *) machvec_noop) 236#endif 237#ifndef platform_log_print 238# define platform_log_print ((ia64_mv_log_print_t *) machvec_noop) 239#endif 240#ifndef platform_pci_fixup 241# define platform_pci_fixup ((ia64_mv_pci_fixup_t *) machvec_noop) 242#endif 243#ifndef platform_pci_enable_device 244# define platform_pci_enable_device ((ia64_mv_pci_enable_device_t *) machvec_noop) 245#endif 246#ifndef platform_send_ipi 247# define platform_send_ipi ia64_send_ipi /* default to architected version */ 248#endif 249#ifndef platform_global_tlb_purge 250# define platform_global_tlb_purge ia64_global_tlb_purge /* default to architected version */ 251#endif 252#ifndef platform_pci_dma_init 253# define platform_pci_dma_init swiotlb_init 254#endif 255#ifndef platform_pci_alloc_consistent 256# define platform_pci_alloc_consistent swiotlb_alloc_consistent 257#endif 258#ifndef platform_pci_free_consistent 259# define platform_pci_free_consistent swiotlb_free_consistent 260#endif 261#ifndef platform_pci_map_single 262# define platform_pci_map_single swiotlb_map_single 263#endif 264#ifndef platform_pci_unmap_single 265# define platform_pci_unmap_single swiotlb_unmap_single 266#endif 267#ifndef platform_pci_map_sg 268# define platform_pci_map_sg swiotlb_map_sg 269#endif 270#ifndef platform_pci_unmap_sg 271# define platform_pci_unmap_sg swiotlb_unmap_sg 272#endif 273#ifndef platform_pci_dma_sync_single 274# define platform_pci_dma_sync_single swiotlb_sync_single 275#endif 276#ifndef platform_pci_dma_sync_sg 277# define platform_pci_dma_sync_sg swiotlb_sync_sg 278#endif 279#ifndef platform_pci_dma_address 280# define platform_pci_dma_address swiotlb_dma_address 281#endif 282#ifndef platform_pci_dma_supported 283# define platform_pci_dma_supported swiotlb_pci_dma_supported 284#endif 285#ifndef platform_irq_desc 286# define platform_irq_desc __ia64_irq_desc 287#endif 288#ifndef platform_irq_to_vector 289# define platform_irq_to_vector __ia64_irq_to_vector 290#endif 291#ifndef platform_local_vector_to_irq 292# define platform_local_vector_to_irq __ia64_local_vector_to_irq 293#endif 294#ifndef platform_inb 295# define platform_inb __ia64_inb 296#endif 297#ifndef platform_inw 298# define platform_inw __ia64_inw 299#endif 300#ifndef platform_inl 301# define platform_inl __ia64_inl 302#endif 303#ifndef platform_outb 304# define platform_outb __ia64_outb 305#endif 306#ifndef platform_outw 307# define platform_outw __ia64_outw 308#endif 309#ifndef platform_outl 310# define platform_outl __ia64_outl 311#endif 312 313#endif /* _ASM_IA64_MACHVEC_H */ 314