machvec.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:11k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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