machvec.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:10k
源码类别:

嵌入式Linux

开发平台:

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