mv_chips.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #ifndef _MV_CHIPS_H_
  2. #define _MV_CHIPS_H_
  3. #define mr32(reg) readl(regs + MVS_##reg)
  4. #define mw32(reg,val) writel((val), regs + MVS_##reg)
  5. #define mw32_f(reg,val) do { \
  6. writel((val), regs + MVS_##reg); \
  7. readl(regs + MVS_##reg); \
  8. } while (0)
  9. static inline u32 mvs_cr32(void __iomem *regs, u32 addr)
  10. {
  11. mw32(CMD_ADDR, addr);
  12. return mr32(CMD_DATA);
  13. }
  14. static inline void mvs_cw32(void __iomem *regs, u32 addr, u32 val)
  15. {
  16. mw32(CMD_ADDR, addr);
  17. mw32(CMD_DATA, val);
  18. }
  19. static inline u32 mvs_read_phy_ctl(struct mvs_info *mvi, u32 port)
  20. {
  21. void __iomem *regs = mvi->regs;
  22. return (port < 4)?mr32(P0_SER_CTLSTAT + port * 4):
  23. mr32(P4_SER_CTLSTAT + (port - 4) * 4);
  24. }
  25. static inline void mvs_write_phy_ctl(struct mvs_info *mvi, u32 port, u32 val)
  26. {
  27. void __iomem *regs = mvi->regs;
  28. if (port < 4)
  29. mw32(P0_SER_CTLSTAT + port * 4, val);
  30. else
  31. mw32(P4_SER_CTLSTAT + (port - 4) * 4, val);
  32. }
  33. static inline u32 mvs_read_port(struct mvs_info *mvi, u32 off, u32 off2, u32 port)
  34. {
  35. void __iomem *regs = mvi->regs + off;
  36. void __iomem *regs2 = mvi->regs + off2;
  37. return (port < 4)?readl(regs + port * 8):
  38. readl(regs2 + (port - 4) * 8);
  39. }
  40. static inline void mvs_write_port(struct mvs_info *mvi, u32 off, u32 off2,
  41. u32 port, u32 val)
  42. {
  43. void __iomem *regs = mvi->regs + off;
  44. void __iomem *regs2 = mvi->regs + off2;
  45. if (port < 4)
  46. writel(val, regs + port * 8);
  47. else
  48. writel(val, regs2 + (port - 4) * 8);
  49. }
  50. static inline u32 mvs_read_port_cfg_data(struct mvs_info *mvi, u32 port)
  51. {
  52. return mvs_read_port(mvi, MVS_P0_CFG_DATA,
  53. MVS_P4_CFG_DATA, port);
  54. }
  55. static inline void mvs_write_port_cfg_data(struct mvs_info *mvi, u32 port, u32 val)
  56. {
  57. mvs_write_port(mvi, MVS_P0_CFG_DATA,
  58. MVS_P4_CFG_DATA, port, val);
  59. }
  60. static inline void mvs_write_port_cfg_addr(struct mvs_info *mvi, u32 port, u32 addr)
  61. {
  62. mvs_write_port(mvi, MVS_P0_CFG_ADDR,
  63. MVS_P4_CFG_ADDR, port, addr);
  64. }
  65. static inline u32 mvs_read_port_vsr_data(struct mvs_info *mvi, u32 port)
  66. {
  67. return mvs_read_port(mvi, MVS_P0_VSR_DATA,
  68. MVS_P4_VSR_DATA, port);
  69. }
  70. static inline void mvs_write_port_vsr_data(struct mvs_info *mvi, u32 port, u32 val)
  71. {
  72. mvs_write_port(mvi, MVS_P0_VSR_DATA,
  73. MVS_P4_VSR_DATA, port, val);
  74. }
  75. static inline void mvs_write_port_vsr_addr(struct mvs_info *mvi, u32 port, u32 addr)
  76. {
  77. mvs_write_port(mvi, MVS_P0_VSR_ADDR,
  78. MVS_P4_VSR_ADDR, port, addr);
  79. }
  80. static inline u32 mvs_read_port_irq_stat(struct mvs_info *mvi, u32 port)
  81. {
  82. return mvs_read_port(mvi, MVS_P0_INT_STAT,
  83. MVS_P4_INT_STAT, port);
  84. }
  85. static inline void mvs_write_port_irq_stat(struct mvs_info *mvi, u32 port, u32 val)
  86. {
  87. mvs_write_port(mvi, MVS_P0_INT_STAT,
  88. MVS_P4_INT_STAT, port, val);
  89. }
  90. static inline u32 mvs_read_port_irq_mask(struct mvs_info *mvi, u32 port)
  91. {
  92. return mvs_read_port(mvi, MVS_P0_INT_MASK,
  93. MVS_P4_INT_MASK, port);
  94. }
  95. static inline void mvs_write_port_irq_mask(struct mvs_info *mvi, u32 port, u32 val)
  96. {
  97. mvs_write_port(mvi, MVS_P0_INT_MASK,
  98. MVS_P4_INT_MASK, port, val);
  99. }
  100. #endif