drv_eth.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (c) 2006-2024 RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2024-09-23 LZerro first version
  9. */
  10. #ifndef __DRV_ETH_H__
  11. #define __DRV_ETH_H__
  12. #include <rtthread.h>
  13. #include <rthw.h>
  14. #include <rtdevice.h>
  15. #include <board.h>
  16. #include "eth_config.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 auto-negotiate advertise register */
  30. #define PHY_AUTONEG_ADVERTISE_REG 0x04U
  31. /** PHY duplex mode */
  32. typedef enum
  33. {
  34. CY_ECM_DUPLEX_HALF, /**< Half duplex */
  35. CY_ECM_DUPLEX_FULL, /**< Full duplex */
  36. CY_ECM_DUPLEX_AUTO /**< Both half/full duplex */
  37. } cy_ecm_duplex_t;
  38. /** PHY speed */
  39. typedef enum
  40. {
  41. CY_ECM_PHY_SPEED_10M, /**< 10 Mbps */
  42. CY_ECM_PHY_SPEED_100M, /**< 100 Mbps */
  43. CY_ECM_PHY_SPEED_1000M, /**< 1000 Mbps */
  44. CY_ECM_PHY_SPEED_AUTO /**< All 10/100/1000 Mbps */
  45. } cy_ecm_phy_speed_t;
  46. /** Standard interface type */
  47. typedef enum
  48. {
  49. CY_ECM_SPEED_TYPE_MII, /**< Media-Independent Interface (MII) */
  50. CY_ECM_SPEED_TYPE_GMII, /**< Gigabit Media-Independent Interface (GMII) */
  51. CY_ECM_SPEED_TYPE_RGMII, /**< Reduced Gigabit Media-Independent Interface (RGMII) */
  52. CY_ECM_SPEED_TYPE_RMII /**< Reduced Media-Independent Interface (RMII) */
  53. } cy_ecm_speed_type_t;
  54. typedef struct
  55. {
  56. cy_ecm_speed_type_t interface_speed_type; /**< Standard interface to be used for data transfer */
  57. cy_ecm_phy_speed_t phy_speed; /**< Physical transfer speed */
  58. cy_ecm_duplex_t mode; /**< Transfer mode */
  59. } cy_ecm_phy_config_t;
  60. extern int eth_index_internal;
  61. #define ETH_INTERFACE_TYPE ETH1
  62. /* After hardware initialization, max wait time to get the physical link up */
  63. #define MAX_WAIT_ETHERNET_PHY_STATUS (10000)
  64. #define REGISTER_ADDRESS_PHY_REG_BMCR PHYREG_00_BMCR /* BMCR register (0x0000) to read the speed and duplex mode */
  65. #define REGISTER_PHY_REG_DUPLEX_MASK PHYBMCR_FULL_DUPLEX_Msk /* Bit 8 of BMCR register to read the duplex mode */
  66. #define REGISTER_PHY_REG_SPEED_MASK (0x2040) /* Bit 6, 13: BMCR register to read the speed */
  67. #define REGISTER_PHY_REG_SPEED_MASK_10M (0x0000) /* Bit 6, 13: Both are set to 0 for 10M speed */
  68. #define REGISTER_PHY_REG_SPEED_MASK_100M (0x2000) /* Bit 6, 13: Set to 0 and 1 respectively for 100M speed */
  69. #define REGISTER_PHY_REG_SPEED_MASK_1000M (0x0040) /* Bit 6, 13: Set to 1 and 0 respectively for 1000M speed */
  70. #endif /* __DRV_ETH_H__ */