home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-ia64 / machvec.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  14.5 KB  |  405 lines

  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, 2003-2004 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/types.h>
  14.  
  15. /* forward declarations: */
  16. struct device;
  17. struct pt_regs;
  18. struct scatterlist;
  19. struct page;
  20. struct mm_struct;
  21. struct pci_bus;
  22. struct task_struct;
  23.  
  24. typedef void ia64_mv_setup_t (char **);
  25. typedef void ia64_mv_cpu_init_t (void);
  26. typedef void ia64_mv_irq_init_t (void);
  27. typedef void ia64_mv_send_ipi_t (int, int, int, int);
  28. typedef void ia64_mv_timer_interrupt_t (int, void *, struct pt_regs *);
  29. typedef void ia64_mv_global_tlb_purge_t (struct mm_struct *, unsigned long, unsigned long, unsigned long);
  30. typedef void ia64_mv_tlb_migrate_finish_t (struct mm_struct *);
  31. typedef unsigned int ia64_mv_local_vector_to_irq (u8);
  32. typedef char *ia64_mv_pci_get_legacy_mem_t (struct pci_bus *);
  33. typedef int ia64_mv_pci_legacy_read_t (struct pci_bus *, u16 port, u32 *val,
  34.                        u8 size);
  35. typedef int ia64_mv_pci_legacy_write_t (struct pci_bus *, u16 port, u32 val,
  36.                     u8 size);
  37. typedef void ia64_mv_migrate_t(struct task_struct * task);
  38.  
  39. /* DMA-mapping interface: */
  40. typedef void ia64_mv_dma_init (void);
  41. typedef void *ia64_mv_dma_alloc_coherent (struct device *, size_t, dma_addr_t *, gfp_t);
  42. typedef void ia64_mv_dma_free_coherent (struct device *, size_t, void *, dma_addr_t);
  43. typedef dma_addr_t ia64_mv_dma_map_single (struct device *, void *, size_t, int);
  44. typedef void ia64_mv_dma_unmap_single (struct device *, dma_addr_t, size_t, int);
  45. typedef int ia64_mv_dma_map_sg (struct device *, struct scatterlist *, int, int);
  46. typedef void ia64_mv_dma_unmap_sg (struct device *, struct scatterlist *, int, int);
  47. typedef void ia64_mv_dma_sync_single_for_cpu (struct device *, dma_addr_t, size_t, int);
  48. typedef void ia64_mv_dma_sync_sg_for_cpu (struct device *, struct scatterlist *, int, int);
  49. typedef void ia64_mv_dma_sync_single_for_device (struct device *, dma_addr_t, size_t, int);
  50. typedef void ia64_mv_dma_sync_sg_for_device (struct device *, struct scatterlist *, int, int);
  51. typedef int ia64_mv_dma_mapping_error (dma_addr_t dma_addr);
  52. typedef int ia64_mv_dma_supported (struct device *, u64);
  53.  
  54. /*
  55.  * WARNING: The legacy I/O space is _architected_.  Platforms are
  56.  * expected to follow this architected model (see Section 10.7 in the
  57.  * IA-64 Architecture Software Developer's Manual).  Unfortunately,
  58.  * some broken machines do not follow that model, which is why we have
  59.  * to make the inX/outX operations part of the machine vector.
  60.  * Platform designers should follow the architected model whenever
  61.  * possible.
  62.  */
  63. typedef unsigned int ia64_mv_inb_t (unsigned long);
  64. typedef unsigned int ia64_mv_inw_t (unsigned long);
  65. typedef unsigned int ia64_mv_inl_t (unsigned long);
  66. typedef void ia64_mv_outb_t (unsigned char, unsigned long);
  67. typedef void ia64_mv_outw_t (unsigned short, unsigned long);
  68. typedef void ia64_mv_outl_t (unsigned int, unsigned long);
  69. typedef void ia64_mv_mmiowb_t (void);
  70. typedef unsigned char ia64_mv_readb_t (const volatile void __iomem *);
  71. typedef unsigned short ia64_mv_readw_t (const volatile void __iomem *);
  72. typedef unsigned int ia64_mv_readl_t (const volatile void __iomem *);
  73. typedef unsigned long ia64_mv_readq_t (const volatile void __iomem *);
  74. typedef unsigned char ia64_mv_readb_relaxed_t (const volatile void __iomem *);
  75. typedef unsigned short ia64_mv_readw_relaxed_t (const volatile void __iomem *);
  76. typedef unsigned int ia64_mv_readl_relaxed_t (const volatile void __iomem *);
  77. typedef unsigned long ia64_mv_readq_relaxed_t (const volatile void __iomem *);
  78.  
  79. static inline void
  80. machvec_noop (void)
  81. {
  82. }
  83.  
  84. static inline void
  85. machvec_noop_mm (struct mm_struct *mm)
  86. {
  87. }
  88.  
  89. static inline void
  90. machvec_noop_task (struct task_struct *task)
  91. {
  92. }
  93.  
  94. extern void machvec_setup (char **);
  95. extern void machvec_timer_interrupt (int, void *, struct pt_regs *);
  96. extern void machvec_dma_sync_single (struct device *, dma_addr_t, size_t, int);
  97. extern void machvec_dma_sync_sg (struct device *, struct scatterlist *, int, int);
  98. extern void machvec_tlb_migrate_finish (struct mm_struct *);
  99.  
  100. # if defined (CONFIG_IA64_HP_SIM)
  101. #  include <asm/machvec_hpsim.h>
  102. # elif defined (CONFIG_IA64_DIG)
  103. #  include <asm/machvec_dig.h>
  104. # elif defined (CONFIG_IA64_HP_ZX1)
  105. #  include <asm/machvec_hpzx1.h>
  106. # elif defined (CONFIG_IA64_HP_ZX1_SWIOTLB)
  107. #  include <asm/machvec_hpzx1_swiotlb.h>
  108. # elif defined (CONFIG_IA64_SGI_SN2)
  109. #  include <asm/machvec_sn2.h>
  110. # elif defined (CONFIG_IA64_GENERIC)
  111.  
  112. # ifdef MACHVEC_PLATFORM_HEADER
  113. #  include MACHVEC_PLATFORM_HEADER
  114. # else
  115. #  define platform_name        ia64_mv.name
  116. #  define platform_setup    ia64_mv.setup
  117. #  define platform_cpu_init    ia64_mv.cpu_init
  118. #  define platform_irq_init    ia64_mv.irq_init
  119. #  define platform_send_ipi    ia64_mv.send_ipi
  120. #  define platform_timer_interrupt    ia64_mv.timer_interrupt
  121. #  define platform_global_tlb_purge    ia64_mv.global_tlb_purge
  122. #  define platform_tlb_migrate_finish    ia64_mv.tlb_migrate_finish
  123. #  define platform_dma_init        ia64_mv.dma_init
  124. #  define platform_dma_alloc_coherent    ia64_mv.dma_alloc_coherent
  125. #  define platform_dma_free_coherent    ia64_mv.dma_free_coherent
  126. #  define platform_dma_map_single    ia64_mv.dma_map_single
  127. #  define platform_dma_unmap_single    ia64_mv.dma_unmap_single
  128. #  define platform_dma_map_sg        ia64_mv.dma_map_sg
  129. #  define platform_dma_unmap_sg        ia64_mv.dma_unmap_sg
  130. #  define platform_dma_sync_single_for_cpu ia64_mv.dma_sync_single_for_cpu
  131. #  define platform_dma_sync_sg_for_cpu    ia64_mv.dma_sync_sg_for_cpu
  132. #  define platform_dma_sync_single_for_device ia64_mv.dma_sync_single_for_device
  133. #  define platform_dma_sync_sg_for_device ia64_mv.dma_sync_sg_for_device
  134. #  define platform_dma_mapping_error        ia64_mv.dma_mapping_error
  135. #  define platform_dma_supported    ia64_mv.dma_supported
  136. #  define platform_local_vector_to_irq    ia64_mv.local_vector_to_irq
  137. #  define platform_pci_get_legacy_mem    ia64_mv.pci_get_legacy_mem
  138. #  define platform_pci_legacy_read    ia64_mv.pci_legacy_read
  139. #  define platform_pci_legacy_write    ia64_mv.pci_legacy_write
  140. #  define platform_inb        ia64_mv.inb
  141. #  define platform_inw        ia64_mv.inw
  142. #  define platform_inl        ia64_mv.inl
  143. #  define platform_outb        ia64_mv.outb
  144. #  define platform_outw        ia64_mv.outw
  145. #  define platform_outl        ia64_mv.outl
  146. #  define platform_mmiowb    ia64_mv.mmiowb
  147. #  define platform_readb        ia64_mv.readb
  148. #  define platform_readw        ia64_mv.readw
  149. #  define platform_readl        ia64_mv.readl
  150. #  define platform_readq        ia64_mv.readq
  151. #  define platform_readb_relaxed        ia64_mv.readb_relaxed
  152. #  define platform_readw_relaxed        ia64_mv.readw_relaxed
  153. #  define platform_readl_relaxed        ia64_mv.readl_relaxed
  154. #  define platform_readq_relaxed        ia64_mv.readq_relaxed
  155. #  define platform_migrate        ia64_mv.migrate
  156. # endif
  157.  
  158. /* __attribute__((__aligned__(16))) is required to make size of the
  159.  * structure multiple of 16 bytes.
  160.  * This will fillup the holes created because of section 3.3.1 in
  161.  * Software Conventions guide.
  162.  */
  163. struct ia64_machine_vector {
  164.     const char *name;
  165.     ia64_mv_setup_t *setup;
  166.     ia64_mv_cpu_init_t *cpu_init;
  167.     ia64_mv_irq_init_t *irq_init;
  168.     ia64_mv_send_ipi_t *send_ipi;
  169.     ia64_mv_timer_interrupt_t *timer_interrupt;
  170.     ia64_mv_global_tlb_purge_t *global_tlb_purge;
  171.     ia64_mv_tlb_migrate_finish_t *tlb_migrate_finish;
  172.     ia64_mv_dma_init *dma_init;
  173.     ia64_mv_dma_alloc_coherent *dma_alloc_coherent;
  174.     ia64_mv_dma_free_coherent *dma_free_coherent;
  175.     ia64_mv_dma_map_single *dma_map_single;
  176.     ia64_mv_dma_unmap_single *dma_unmap_single;
  177.     ia64_mv_dma_map_sg *dma_map_sg;
  178.     ia64_mv_dma_unmap_sg *dma_unmap_sg;
  179.     ia64_mv_dma_sync_single_for_cpu *dma_sync_single_for_cpu;
  180.     ia64_mv_dma_sync_sg_for_cpu *dma_sync_sg_for_cpu;
  181.     ia64_mv_dma_sync_single_for_device *dma_sync_single_for_device;
  182.     ia64_mv_dma_sync_sg_for_device *dma_sync_sg_for_device;
  183.     ia64_mv_dma_mapping_error *dma_mapping_error;
  184.     ia64_mv_dma_supported *dma_supported;
  185.     ia64_mv_local_vector_to_irq *local_vector_to_irq;
  186.     ia64_mv_pci_get_legacy_mem_t *pci_get_legacy_mem;
  187.     ia64_mv_pci_legacy_read_t *pci_legacy_read;
  188.     ia64_mv_pci_legacy_write_t *pci_legacy_write;
  189.     ia64_mv_inb_t *inb;
  190.     ia64_mv_inw_t *inw;
  191.     ia64_mv_inl_t *inl;
  192.     ia64_mv_outb_t *outb;
  193.     ia64_mv_outw_t *outw;
  194.     ia64_mv_outl_t *outl;
  195.     ia64_mv_mmiowb_t *mmiowb;
  196.     ia64_mv_readb_t *readb;
  197.     ia64_mv_readw_t *readw;
  198.     ia64_mv_readl_t *readl;
  199.     ia64_mv_readq_t *readq;
  200.     ia64_mv_readb_relaxed_t *readb_relaxed;
  201.     ia64_mv_readw_relaxed_t *readw_relaxed;
  202.     ia64_mv_readl_relaxed_t *readl_relaxed;
  203.     ia64_mv_readq_relaxed_t *readq_relaxed;
  204.     ia64_mv_migrate_t *migrate;
  205. } __attribute__((__aligned__(16))); /* align attrib? see above comment */
  206.  
  207. #define MACHVEC_INIT(name)            \
  208. {                        \
  209.     #name,                    \
  210.     platform_setup,                \
  211.     platform_cpu_init,            \
  212.     platform_irq_init,            \
  213.     platform_send_ipi,            \
  214.     platform_timer_interrupt,        \
  215.     platform_global_tlb_purge,        \
  216.     platform_tlb_migrate_finish,        \
  217.     platform_dma_init,            \
  218.     platform_dma_alloc_coherent,        \
  219.     platform_dma_free_coherent,        \
  220.     platform_dma_map_single,        \
  221.     platform_dma_unmap_single,        \
  222.     platform_dma_map_sg,            \
  223.     platform_dma_unmap_sg,            \
  224.     platform_dma_sync_single_for_cpu,    \
  225.     platform_dma_sync_sg_for_cpu,        \
  226.     platform_dma_sync_single_for_device,    \
  227.     platform_dma_sync_sg_for_device,    \
  228.     platform_dma_mapping_error,            \
  229.     platform_dma_supported,            \
  230.     platform_local_vector_to_irq,        \
  231.     platform_pci_get_legacy_mem,        \
  232.     platform_pci_legacy_read,        \
  233.     platform_pci_legacy_write,        \
  234.     platform_inb,                \
  235.     platform_inw,                \
  236.     platform_inl,                \
  237.     platform_outb,                \
  238.     platform_outw,                \
  239.     platform_outl,                \
  240.     platform_mmiowb,            \
  241.     platform_readb,                \
  242.     platform_readw,                \
  243.     platform_readl,                \
  244.     platform_readq,                \
  245.     platform_readb_relaxed,            \
  246.     platform_readw_relaxed,            \
  247.     platform_readl_relaxed,            \
  248.     platform_readq_relaxed,            \
  249.     platform_migrate,            \
  250. }
  251.  
  252. extern struct ia64_machine_vector ia64_mv;
  253. extern void machvec_init (const char *name);
  254.  
  255. # else
  256. #  error Unknown configuration.  Update asm-ia64/machvec.h.
  257. # endif /* CONFIG_IA64_GENERIC */
  258.  
  259. /*
  260.  * Declare default routines which aren't declared anywhere else:
  261.  */
  262. extern ia64_mv_dma_init            swiotlb_init;
  263. extern ia64_mv_dma_alloc_coherent    swiotlb_alloc_coherent;
  264. extern ia64_mv_dma_free_coherent    swiotlb_free_coherent;
  265. extern ia64_mv_dma_map_single        swiotlb_map_single;
  266. extern ia64_mv_dma_unmap_single        swiotlb_unmap_single;
  267. extern ia64_mv_dma_map_sg        swiotlb_map_sg;
  268. extern ia64_mv_dma_unmap_sg        swiotlb_unmap_sg;
  269. extern ia64_mv_dma_sync_single_for_cpu    swiotlb_sync_single_for_cpu;
  270. extern ia64_mv_dma_sync_sg_for_cpu    swiotlb_sync_sg_for_cpu;
  271. extern ia64_mv_dma_sync_single_for_device swiotlb_sync_single_for_device;
  272. extern ia64_mv_dma_sync_sg_for_device    swiotlb_sync_sg_for_device;
  273. extern ia64_mv_dma_mapping_error    swiotlb_dma_mapping_error;
  274. extern ia64_mv_dma_supported        swiotlb_dma_supported;
  275.  
  276. /*
  277.  * Define default versions so we can extend machvec for new platforms without having
  278.  * to update the machvec files for all existing platforms.
  279.  */
  280. #ifndef platform_setup
  281. # define platform_setup            machvec_setup
  282. #endif
  283. #ifndef platform_cpu_init
  284. # define platform_cpu_init        machvec_noop
  285. #endif
  286. #ifndef platform_irq_init
  287. # define platform_irq_init        machvec_noop
  288. #endif
  289.  
  290. #ifndef platform_send_ipi
  291. # define platform_send_ipi        ia64_send_ipi    /* default to architected version */
  292. #endif
  293. #ifndef platform_timer_interrupt
  294. # define platform_timer_interrupt     machvec_timer_interrupt
  295. #endif
  296. #ifndef platform_global_tlb_purge
  297. # define platform_global_tlb_purge    ia64_global_tlb_purge /* default to architected version */
  298. #endif
  299. #ifndef platform_tlb_migrate_finish
  300. # define platform_tlb_migrate_finish    machvec_noop_mm
  301. #endif
  302. #ifndef platform_dma_init
  303. # define platform_dma_init        swiotlb_init
  304. #endif
  305. #ifndef platform_dma_alloc_coherent
  306. # define platform_dma_alloc_coherent    swiotlb_alloc_coherent
  307. #endif
  308. #ifndef platform_dma_free_coherent
  309. # define platform_dma_free_coherent    swiotlb_free_coherent
  310. #endif
  311. #ifndef platform_dma_map_single
  312. # define platform_dma_map_single    swiotlb_map_single
  313. #endif
  314. #ifndef platform_dma_unmap_single
  315. # define platform_dma_unmap_single    swiotlb_unmap_single
  316. #endif
  317. #ifndef platform_dma_map_sg
  318. # define platform_dma_map_sg        swiotlb_map_sg
  319. #endif
  320. #ifndef platform_dma_unmap_sg
  321. # define platform_dma_unmap_sg        swiotlb_unmap_sg
  322. #endif
  323. #ifndef platform_dma_sync_single_for_cpu
  324. # define platform_dma_sync_single_for_cpu    swiotlb_sync_single_for_cpu
  325. #endif
  326. #ifndef platform_dma_sync_sg_for_cpu
  327. # define platform_dma_sync_sg_for_cpu        swiotlb_sync_sg_for_cpu
  328. #endif
  329. #ifndef platform_dma_sync_single_for_device
  330. # define platform_dma_sync_single_for_device    swiotlb_sync_single_for_device
  331. #endif
  332. #ifndef platform_dma_sync_sg_for_device
  333. # define platform_dma_sync_sg_for_device    swiotlb_sync_sg_for_device
  334. #endif
  335. #ifndef platform_dma_mapping_error
  336. # define platform_dma_mapping_error        swiotlb_dma_mapping_error
  337. #endif
  338. #ifndef platform_dma_supported
  339. # define  platform_dma_supported    swiotlb_dma_supported
  340. #endif
  341. #ifndef platform_local_vector_to_irq
  342. # define platform_local_vector_to_irq    __ia64_local_vector_to_irq
  343. #endif
  344. #ifndef platform_pci_get_legacy_mem
  345. # define platform_pci_get_legacy_mem    ia64_pci_get_legacy_mem
  346. #endif
  347. #ifndef platform_pci_legacy_read
  348. # define platform_pci_legacy_read    ia64_pci_legacy_read
  349. extern int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size);
  350. #endif
  351. #ifndef platform_pci_legacy_write
  352. # define platform_pci_legacy_write    ia64_pci_legacy_write
  353. extern int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size);
  354. #endif
  355. #ifndef platform_inb
  356. # define platform_inb        __ia64_inb
  357. #endif
  358. #ifndef platform_inw
  359. # define platform_inw        __ia64_inw
  360. #endif
  361. #ifndef platform_inl
  362. # define platform_inl        __ia64_inl
  363. #endif
  364. #ifndef platform_outb
  365. # define platform_outb        __ia64_outb
  366. #endif
  367. #ifndef platform_outw
  368. # define platform_outw        __ia64_outw
  369. #endif
  370. #ifndef platform_outl
  371. # define platform_outl        __ia64_outl
  372. #endif
  373. #ifndef platform_mmiowb
  374. # define platform_mmiowb    __ia64_mmiowb
  375. #endif
  376. #ifndef platform_readb
  377. # define platform_readb        __ia64_readb
  378. #endif
  379. #ifndef platform_readw
  380. # define platform_readw        __ia64_readw
  381. #endif
  382. #ifndef platform_readl
  383. # define platform_readl        __ia64_readl
  384. #endif
  385. #ifndef platform_readq
  386. # define platform_readq        __ia64_readq
  387. #endif
  388. #ifndef platform_readb_relaxed
  389. # define platform_readb_relaxed    __ia64_readb_relaxed
  390. #endif
  391. #ifndef platform_readw_relaxed
  392. # define platform_readw_relaxed    __ia64_readw_relaxed
  393. #endif
  394. #ifndef platform_readl_relaxed
  395. # define platform_readl_relaxed    __ia64_readl_relaxed
  396. #endif
  397. #ifndef platform_readq_relaxed
  398. # define platform_readq_relaxed    __ia64_readq_relaxed
  399. #endif
  400. #ifndef platform_migrate
  401. # define platform_migrate machvec_noop_task
  402. #endif
  403.  
  404. #endif /* _ASM_IA64_MACHVEC_H */
  405.