iommu.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. struct iommu_arena {
  18. unsigned long *map;
  19. unsigned int hint;
  20. unsigned int limit;
  21. };
  22. struct iommu {
  23. spinlock_t lock;
  24. struct iommu_arena arena;
  25. iopte_t *page_table;
  26. u32 page_table_map_base;
  27. unsigned long iommu_control;
  28. unsigned long iommu_tsbbase;
  29. unsigned long iommu_flush;
  30. unsigned long iommu_flushinv;
  31. unsigned long iommu_tags;
  32. unsigned long iommu_ctxflush;
  33. unsigned long write_complete_reg;
  34. unsigned long dummy_page;
  35. unsigned long dummy_page_pa;
  36. unsigned long ctx_lowest_free;
  37. DECLARE_BITMAP(ctx_bitmap, IOMMU_NUM_CTXS);
  38. u32 dma_addr_mask;
  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_ctxflush;
  46. unsigned long strbuf_ctxmatch_base;
  47. unsigned long strbuf_flushflag_pa;
  48. volatile unsigned long *strbuf_flushflag;
  49. volatile unsigned long __flushflag_buf[(64+(64-1)) / sizeof(long)];
  50. };
  51. extern int iommu_table_init(struct iommu *iommu, int tsbsize,
  52. u32 dma_offset, u32 dma_addr_mask);
  53. #endif /* !(_SPARC64_IOMMU_H) */