iommu_64.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* iommu.h: Definitions for the sun5 IOMMU.
  2. *
  3. * Copyright (C) 1996, 1999, 2007 David S. Miller ([email protected])
  4. */
  5. #ifndef _SPARC64_IOMMU_H
  6. #define _SPARC64_IOMMU_H
  7. /* The format of an iopte in the page tables. */
  8. #define IOPTE_VALID 0x8000000000000000UL
  9. #define IOPTE_64K 0x2000000000000000UL
  10. #define IOPTE_STBUF 0x1000000000000000UL
  11. #define IOPTE_INTRA 0x0800000000000000UL
  12. #define IOPTE_CONTEXT 0x07ff800000000000UL
  13. #define IOPTE_PAGE 0x00007fffffffe000UL
  14. #define IOPTE_CACHE 0x0000000000000010UL
  15. #define IOPTE_WRITE 0x0000000000000002UL
  16. #define IOMMU_NUM_CTXS 4096
  17. #include <linux/iommu-common.h>
  18. struct iommu_arena {
  19. unsigned long *map;
  20. unsigned int hint;
  21. unsigned int limit;
  22. };
  23. #define ATU_64_SPACE_SIZE 0x800000000 /* 32G */
  24. /* Data structures for SPARC ATU architecture */
  25. struct atu_iotsb {
  26. void *table; /* IOTSB table base virtual addr*/
  27. u64 ra; /* IOTSB table real addr */
  28. u64 dvma_size; /* ranges[3].size or OS slected 32G size */
  29. u64 dvma_base; /* ranges[3].base */
  30. u64 table_size; /* IOTSB table size */
  31. u64 page_size; /* IO PAGE size for IOTSB */
  32. u32 iotsb_num; /* tsbnum is same as iotsb_handle */
  33. };
  34. struct atu_ranges {
  35. u64 base;
  36. u64 size;
  37. };
  38. struct atu {
  39. struct atu_ranges *ranges;
  40. struct atu_iotsb *iotsb;
  41. struct iommu_map_table tbl;
  42. u64 base;
  43. u64 size;
  44. u64 dma_addr_mask;
  45. };
  46. struct iommu {
  47. struct iommu_map_table tbl;
  48. struct atu *atu;
  49. spinlock_t lock;
  50. u32 dma_addr_mask;
  51. iopte_t *page_table;
  52. unsigned long iommu_control;
  53. unsigned long iommu_tsbbase;
  54. unsigned long iommu_flush;
  55. unsigned long iommu_flushinv;
  56. unsigned long iommu_tags;
  57. unsigned long iommu_ctxflush;
  58. unsigned long write_complete_reg;
  59. unsigned long dummy_page;
  60. unsigned long dummy_page_pa;
  61. unsigned long ctx_lowest_free;
  62. DECLARE_BITMAP(ctx_bitmap, IOMMU_NUM_CTXS);
  63. };
  64. struct strbuf {
  65. int strbuf_enabled;
  66. unsigned long strbuf_control;
  67. unsigned long strbuf_pflush;
  68. unsigned long strbuf_fsync;
  69. unsigned long strbuf_err_stat;
  70. unsigned long strbuf_tag_diag;
  71. unsigned long strbuf_line_diag;
  72. unsigned long strbuf_ctxflush;
  73. unsigned long strbuf_ctxmatch_base;
  74. unsigned long strbuf_flushflag_pa;
  75. volatile unsigned long *strbuf_flushflag;
  76. volatile unsigned long __flushflag_buf[(64+(64-1)) / sizeof(long)];
  77. };
  78. int iommu_table_init(struct iommu *iommu, int tsbsize,
  79. u32 dma_offset, u32 dma_addr_mask,
  80. int numa_node);
  81. #endif /* !(_SPARC64_IOMMU_H) */