fjes_regs.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * FUJITSU Extended Socket Network Device driver
  4. * Copyright (c) 2015 FUJITSU LIMITED
  5. */
  6. #ifndef FJES_REGS_H_
  7. #define FJES_REGS_H_
  8. #include <linux/bitops.h>
  9. #define XSCT_DEVICE_REGISTER_SIZE 0x1000
  10. /* register offset */
  11. /* Information registers */
  12. #define XSCT_OWNER_EPID 0x0000 /* Owner EPID */
  13. #define XSCT_MAX_EP 0x0004 /* Maximum EP */
  14. /* Device Control registers */
  15. #define XSCT_DCTL 0x0010 /* Device Control */
  16. /* Command Control registers */
  17. #define XSCT_CR 0x0020 /* Command request */
  18. #define XSCT_CS 0x0024 /* Command status */
  19. #define XSCT_SHSTSAL 0x0028 /* Share status address Low */
  20. #define XSCT_SHSTSAH 0x002C /* Share status address High */
  21. #define XSCT_REQBL 0x0034 /* Request Buffer length */
  22. #define XSCT_REQBAL 0x0038 /* Request Buffer Address Low */
  23. #define XSCT_REQBAH 0x003C /* Request Buffer Address High */
  24. #define XSCT_RESPBL 0x0044 /* Response Buffer Length */
  25. #define XSCT_RESPBAL 0x0048 /* Response Buffer Address Low */
  26. #define XSCT_RESPBAH 0x004C /* Response Buffer Address High */
  27. /* Interrupt Control registers */
  28. #define XSCT_IS 0x0080 /* Interrupt status */
  29. #define XSCT_IMS 0x0084 /* Interrupt mask set */
  30. #define XSCT_IMC 0x0088 /* Interrupt mask clear */
  31. #define XSCT_IG 0x008C /* Interrupt generator */
  32. #define XSCT_ICTL 0x0090 /* Interrupt control */
  33. /* register structure */
  34. /* Information registers */
  35. union REG_OWNER_EPID {
  36. struct {
  37. __le32 epid:16;
  38. __le32:16;
  39. } bits;
  40. __le32 reg;
  41. };
  42. union REG_MAX_EP {
  43. struct {
  44. __le32 maxep:16;
  45. __le32:16;
  46. } bits;
  47. __le32 reg;
  48. };
  49. /* Device Control registers */
  50. union REG_DCTL {
  51. struct {
  52. __le32 reset:1;
  53. __le32 rsv0:15;
  54. __le32 rsv1:16;
  55. } bits;
  56. __le32 reg;
  57. };
  58. /* Command Control registers */
  59. union REG_CR {
  60. struct {
  61. __le32 req_code:16;
  62. __le32 err_info:14;
  63. __le32 error:1;
  64. __le32 req_start:1;
  65. } bits;
  66. __le32 reg;
  67. };
  68. union REG_CS {
  69. struct {
  70. __le32 req_code:16;
  71. __le32 rsv0:14;
  72. __le32 busy:1;
  73. __le32 complete:1;
  74. } bits;
  75. __le32 reg;
  76. };
  77. /* Interrupt Control registers */
  78. union REG_ICTL {
  79. struct {
  80. __le32 automak:1;
  81. __le32 rsv0:31;
  82. } bits;
  83. __le32 reg;
  84. };
  85. enum REG_ICTL_MASK {
  86. REG_ICTL_MASK_INFO_UPDATE = 1 << 20,
  87. REG_ICTL_MASK_DEV_STOP_REQ = 1 << 19,
  88. REG_ICTL_MASK_TXRX_STOP_REQ = 1 << 18,
  89. REG_ICTL_MASK_TXRX_STOP_DONE = 1 << 17,
  90. REG_ICTL_MASK_RX_DATA = 1 << 16,
  91. REG_ICTL_MASK_ALL = GENMASK(20, 16),
  92. };
  93. enum REG_IS_MASK {
  94. REG_IS_MASK_IS_ASSERT = 1 << 31,
  95. REG_IS_MASK_EPID = GENMASK(15, 0),
  96. };
  97. struct fjes_hw;
  98. u32 fjes_hw_rd32(struct fjes_hw *hw, u32 reg);
  99. #define wr32(reg, val) \
  100. do { \
  101. u8 *base = hw->base; \
  102. writel((val), &base[(reg)]); \
  103. } while (0)
  104. #define rd32(reg) (fjes_hw_rd32(hw, reg))
  105. #endif /* FJES_REGS_H_ */