iommu_64.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /* iommu.h: Definitions for the sun5 IOMMU.
  2. *
  3. * Copyright (C) 1996, 1999, 2007 David S. Miller (davem@davemloft.net)
  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. struct iommu {
  24. struct iommu_map_table tbl;
  25. spinlock_t lock;
  26. u32 dma_addr_mask;
  27. iopte_t *page_table;
  28. unsigned long iommu_control;
  29. unsigned long iommu_tsbbase;
  30. unsigned long iommu_flush;
  31. unsigned long iommu_flushinv;
  32. unsigned long iommu_tags;
  33. unsigned long iommu_ctxflush;
  34. unsigned long write_complete_reg;
  35. unsigned long dummy_page;
  36. unsigned long dummy_page_pa;
  37. unsigned long ctx_lowest_free;
  38. DECLARE_BITMAP(ctx_bitmap, IOMMU_NUM_CTXS);
  39. };
  40. struct strbuf {
  41. int strbuf_enabled;
  42. unsigned long strbuf_control;
  43. unsigned long strbuf_pflush;
  44. unsigned long strbuf_fsync;
  45. unsigned long strbuf_err_stat;
  46. unsigned long strbuf_tag_diag;
  47. unsigned long strbuf_line_diag;
  48. unsigned long strbuf_ctxflush;
  49. unsigned long strbuf_ctxmatch_base;
  50. unsigned long strbuf_flushflag_pa;
  51. volatile unsigned long *strbuf_flushflag;
  52. volatile unsigned long __flushflag_buf[(64+(64-1)) / sizeof(long)];
  53. };
  54. int iommu_table_init(struct iommu *iommu, int tsbsize,
  55. u32 dma_offset, u32 dma_addr_mask,
  56. int numa_node);
  57. #endif /* !(_SPARC64_IOMMU_H) */