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. 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. void (*flush_all)(struct iommu *);
  26. iopte_t *page_table;
  27. u32 page_table_map_base;
  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. u32 dma_addr_mask;
  40. };
  41. struct strbuf {
  42. int strbuf_enabled;
  43. unsigned long strbuf_control;
  44. unsigned long strbuf_pflush;
  45. unsigned long strbuf_fsync;
  46. unsigned long strbuf_err_stat;
  47. unsigned long strbuf_tag_diag;
  48. unsigned long strbuf_line_diag;
  49. unsigned long strbuf_ctxflush;
  50. unsigned long strbuf_ctxmatch_base;
  51. unsigned long strbuf_flushflag_pa;
  52. volatile unsigned long *strbuf_flushflag;
  53. volatile unsigned long __flushflag_buf[(64+(64-1)) / sizeof(long)];
  54. };
  55. extern int iommu_table_init(struct iommu *iommu, int tsbsize,
  56. u32 dma_offset, u32 dma_addr_mask,
  57. int numa_node);
  58. #endif /* !(_SPARC64_IOMMU_H) */