memoryDefinitionSynchronousData.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /*
  2. * Marvel systems use the IO7 I/O chip provides PCI/PCIX/AGP access
  3. *
  4. * This file is based on:
  5. *
  6. * Marvel / EV7 System Programmer's Manual
  7. * Revision 1.00
  8. * 14 May 2001
  9. */
  10. #ifndef __ALPHA_MARVEL__H__
  11. #define __ALPHA_MARVEL__H__
  12. #include <linux/types.h>
  13. #include <linux/spinlock.h>
  14. #include <asm/compiler.h>
  15. #define MARVEL_MAX_PIDS 32 /* as long as we rely on 43-bit superpage */
  16. #define MARVEL_IRQ_VEC_PE_SHIFT (10)
  17. #define MARVEL_IRQ_VEC_IRQ_MASK ((1 << MARVEL_IRQ_VEC_PE_SHIFT) - 1)
  18. #define MARVEL_NR_IRQS \
  19. (16 + (MARVEL_MAX_PIDS * (1 << MARVEL_IRQ_VEC_PE_SHIFT)))
  20. /*
  21. * EV7 RBOX Registers
  22. */
  23. typedef struct {
  24. volatile unsigned long csr __attribute__((aligned(16)));
  25. } ev7_csr;
  26. typedef struct {
  27. ev7_csr RBOX_CFG; /* 0x0000 */
  28. ev7_csr RBOX_NSVC;
  29. ev7_csr RBOX_EWVC;
  30. ev7_csr RBOX_WHAMI;
  31. ev7_csr RBOX_TCTL; /* 0x0040 */
  32. ev7_csr RBOX_INT;
  33. ev7_csr RBOX_IMASK;
  34. ev7_csr RBOX_IREQ;
  35. ev7_csr RBOX_INTQ; /* 0x0080 */
  36. ev7_csr RBOX_INTA;
  37. ev7_csr RBOX_IT;
  38. ev7_csr RBOX_SCRATCH1;
  39. ev7_csr RBOX_SCRATCH2; /* 0x00c0 */
  40. ev7_csr RBOX_L_ERR;
  41. } ev7_csrs;
  42. /*
  43. * EV7 CSR addressing macros
  44. */
  45. #define EV7_MASK40(addr) ((addr) & ((1UL << 41) - 1))
  46. #define EV7_KERN_ADDR(addr) ((void *)(IDENT_ADDR | EV7_MASK40(addr)))
  47. #define EV7_PE_MASK 0x1ffUL /* 9 bits ( 256 + mem/io ) */
  48. #define EV7_IPE(pe) ((~((long)(pe)) & EV7_PE_MASK) << 35)
  49. #define EV7_CSR_PHYS(pe, off) (EV7_IPE(pe) | (0x7FFCUL << 20) | (off))
  50. #define EV7_CSRS_PHYS(pe) (EV7_CSR_PHYS(pe, 0UL))
  51. #define EV7_CSR_KERN(pe, off) (EV7_KERN_ADDR(EV7_CSR_PHYS(pe, off)))
  52. #define EV7_CSRS_KERN(pe) (EV7_KERN_ADDR(EV7_CSRS_PHYS(pe)))
  53. #define EV7_CSR_OFFSET(name) ((unsigned long)&((ev7_csrs *)NULL)->name.csr)
  54. /*
  55. * IO7 registers
  56. */
  57. typedef struct {
  58. volatile unsigned long csr __attribute__((aligned(64)));
  59. } io7_csr;
  60. typedef struct {
  61. /* I/O Port Control Registers */
  62. io7_csr POx_CTRL; /* 0x0000 */
  63. io7_csr POx_CACHE_CTL;
  64. io7_csr POx_TIMER;
  65. io7_csr POx_IO_ADR_EXT;
  66. io7_csr POx_MEM_ADR_EXT; /* 0x0100 */
  67. io7_csr POx_XCAL_CTRL;
  68. io7_csr rsvd1[2]; /* ?? spec doesn't show 0x180 */
  69. io7_csr POx_DM_SOURCE; /* 0x0200 */
  70. io7_csr POx_DM_DEST;
  71. io7_csr POx_DM_SIZE;
  72. io7_csr POx_DM_CTRL;
  73. io7_csr rsvd2[4]; /* 0x0300 */
  74. /* AGP Control Registers -- port 3 only */
  75. io7_csr AGP_CAP_ID; /* 0x0400 */
  76. io7_csr AGP_STAT;
  77. io7_csr AGP_CMD;
  78. io7_csr rsvd3;
  79. /* I/O Port Monitor Registers */
  80. io7_csr POx_MONCTL; /* 0x0500 */
  81. io7_csr POx_CTRA;
  82. io7_csr POx_CTRB;
  83. io7_csr POx_CTR56;
  84. io7_csr POx_SCRATCH; /* 0x0600 */
  85. io7_csr POx_XTRA_A;
  86. io7_csr POx_XTRA_TS;
  87. io7_csr POx_XTRA_Z;
  88. io7_csr rsvd4; /* 0x0700 */
  89. io7_csr POx_THRESHA;
  90. io7_csr POx_THRESHB;
  91. io7_csr rsvd5[33];
  92. /* System Address Space Window Control Registers */
  93. io7_csr POx_WBASE[4]; /* 0x1000 */
  94. io7_csr POx_WMASK[4];
  95. io7_csr POx_TBASE[4];
  96. io7_csr POx_SG_TBIA;
  97. io7_csr POx_MSI_WBASE;
  98. io7_csr rsvd6[50];
  99. /* I/O Port Error Registers */
  100. io7_csr POx_ERR_SUM;
  101. io7_csr POx_FIRST_ERR;
  102. io7_csr POx_MSK_HEI;
  103. io7_csr POx_TLB_ERR;
  104. io7_csr POx_SPL_COMPLT;
  105. io7_csr POx_TRANS_SUM;