drv_eth.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-12-25 zylx first version
  9. * 2020-07-18 wanghaijing add SPECIAL_MODES_REG
  10. */
  11. #ifndef __DRV_ETH_H__
  12. #define __DRV_ETH_H__
  13. #include <rtthread.h>
  14. #include <rthw.h>
  15. #include <rtdevice.h>
  16. #include <board.h>
  17. /* The PHY basic control register */
  18. #define PHY_BASIC_CONTROL_REG 0x00U
  19. #define PHY_RESET_MASK (1<<15)
  20. #define PHY_AUTO_NEGOTIATION_MASK (1<<12)
  21. /* The PHY basic status register */
  22. #define PHY_BASIC_STATUS_REG 0x01U
  23. #define PHY_LINKED_STATUS_MASK (1<<2)
  24. #define PHY_AUTONEGO_COMPLETE_MASK (1<<5)
  25. /* The PHY ID one register */
  26. #define PHY_ID1_REG 0x02U
  27. /* The PHY ID two register */
  28. #define PHY_ID2_REG 0x03U
  29. /* The PHY SPECIAL MODES REGISTER */
  30. #define PHY_SPECIAL_MODES_REG 0x12U
  31. /* The PHY auto-negotiate advertise register */
  32. #define PHY_AUTONEG_ADVERTISE_REG 0x04U
  33. #define PHY_Status_REG 0x1FU
  34. #define PHY_FULL_DUPLEX_MASK (1<<4)
  35. #define PHY_Status_SPEED_10M(sr) ((sr) & PHY_10M_MASK)
  36. #define PHY_Status_SPEED_100M(sr) ((sr) & PHY_100M_MASK)
  37. #define PHY_Status_FULL_DUPLEX(sr) ((sr) & PHY_FULL_DUPLEX_MASK)
  38. #ifdef PHY_USING_LAN8720A
  39. /* The PHY interrupt source flag register. */
  40. #define PHY_INTERRUPT_FLAG_REG 0x1DU
  41. /* The PHY interrupt mask register. */
  42. #define PHY_INTERRUPT_MASK_REG 0x1EU
  43. #define PHY_LINK_DOWN_MASK (1<<4)
  44. #define PHY_AUTO_NEGO_COMPLETE_MASK (1<<6)
  45. /* The PHY status register. */
  46. #define PHY_Status_REG 0x1FU
  47. #define PHY_10M_MASK (1<<2)
  48. #define PHY_100M_MASK (1<<3)
  49. #define PHY_FULL_DUPLEX_MASK (1<<4)
  50. #endif /* PHY_USING_LAN8720A */
  51. #ifdef PHY_USING_DM9161CEP
  52. #define PHY_Status_REG 0x11U
  53. #define PHY_10M_MASK ((1<<12) || (1<<13))
  54. #define PHY_100M_MASK ((1<<14) || (1<<15))
  55. #define PHY_FULL_DUPLEX_MASK ((1<<15) || (1<<13))
  56. /* The PHY interrupt source flag register. */
  57. #define PHY_INTERRUPT_FLAG_REG 0x15U
  58. /* The PHY interrupt mask register. */
  59. #define PHY_INTERRUPT_MASK_REG 0x15U
  60. #define PHY_LINK_CHANGE_FLAG (1<<2)
  61. #define PHY_LINK_CHANGE_MASK (1<<9)
  62. #define PHY_INT_MASK 0
  63. #endif /* PHY_USING_DM9161CEP */
  64. #ifdef PHY_USING_DP83848C
  65. #define PHY_Status_REG 0x10U
  66. #define PHY_10M_MASK (1<<1)
  67. #define PHY_FULL_DUPLEX_MASK (1<<2)
  68. #define PHY_Status_SPEED_10M(sr) ((sr) & PHY_10M_MASK)
  69. #define PHY_Status_SPEED_100M(sr) (!PHY_Status_SPEED_10M(sr))
  70. #define PHY_Status_FULL_DUPLEX(sr) ((sr) & PHY_FULL_DUPLEX_MASK)
  71. #define PHY_INTERRUPT_FLAG_REG 0x12U
  72. #define PHY_LINK_CHANGE_FLAG (1<<13)
  73. #define PHY_INTERRUPT_CTRL_REG 0x11U
  74. #define PHY_INTERRUPT_EN ((1<<0)|(1<<1))
  75. #define PHY_INTERRUPT_MASK_REG 0x12U
  76. #define PHY_INT_MASK (1<<5)
  77. #endif /* PHY_USING_DP83848C */
  78. #endif /* __DRV_ETH_H__ */