gd_ethernet.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. /*!
  2. *****************************************************************************
  3. ** \file gd_lib/GK7101/inc/gd_ethernet.h
  4. **
  5. ** \version 2.0
  6. **
  7. ** \date Sept 09, 2014
  8. **
  9. ** \author Steven Yu
  10. **
  11. ** \brief Ethernet Driver.
  12. **
  13. ** This application allows testing of the ethernet function.
  14. **
  15. ** \attention THIS SAMPLE CODE IS PROVIDED AS IS. GOKE MICROELECTRONICS
  16. ** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR
  17. ** OMMISSIONS.
  18. **
  19. ** (C) Copyright 2002 - 2014 by Goke Microelectronics Shanghai WSC
  20. **
  21. *******************************************************************************
  22. */
  23. //#define PRINT_ETH_LOG
  24. #ifndef _GD_ETHERNET_H_
  25. #define _GD_ETHERNET_H_
  26. #include "gtypes.h"
  27. #include <gmodids.h>
  28. #include "gd_gpio.h"
  29. //*****************************************************************************
  30. //*****************************************************************************
  31. //** Defines and Macros
  32. //*****************************************************************************
  33. //*****************************************************************************
  34. /* Length of Ethernet Mac address in bytes (Do NOT change) */
  35. #define GD_ETH_MAC_ADDR_NUM (6)
  36. typedef U8 GD_ETH_MacT[GD_ETH_MAC_ADDR_NUM];
  37. #define GD_ETH_IP_ADDR_NUM (4)
  38. typedef U8 GD_ETH_IpT[GD_ETH_IP_ADDR_NUM];
  39. #define GD_ETH_ERR_BASE (GD_ETH_MODULE_ID << 16)
  40. //*****************************************************************************
  41. //*****************************************************************************
  42. //** Enumerated types
  43. //*****************************************************************************
  44. //*****************************************************************************
  45. enum
  46. {
  47. GD_ERR_ETH_NOT_SUPPORTED = GD_ETH_ERR_BASE, //!< Device not supported.
  48. GD_ERR_ETH_NOT_OPEN,
  49. GD_ERR_ETH_PHY_NOT_EXIST,
  50. GD_ERR_ETH_PHY_RW,
  51. GD_ERR_ETH_PHY_OTHER,
  52. GD_ERR_ETH_MAC_NOT_OK,
  53. GD_ERR_ETH_LINK_DOWN,
  54. GD_ERR_ETH_TB_OVER,
  55. GD_ERR_ETH_NO_TD,
  56. };
  57. /*!
  58. *************************************************************************
  59. ** \brief Version of Ethernet driver.
  60. **
  61. ** This number consists of a \b major version number stored in bits
  62. ** 16 to 31 (upper word) and a \b minor version number stored in bits
  63. ** 0 to 15 (lower word).
  64. ** - The \b major number has to be increased when a parameter change
  65. ** occurs for the existing driver's API after its first release.
  66. ** - The \b minor number has to be increased when functions are added to
  67. ** the existing driver's API after its first release.
  68. **
  69. ** \note This value has to be assigned to the \b version field of the
  70. ** GD_ETH_OpenParamsT structure.
  71. *************************************************************************
  72. */
  73. typedef enum
  74. {
  75. GD_ETH_VERSION = 0x00020000 //!< The current driver version
  76. }GD_ETH_VersionE;
  77. /*!
  78. *************************************************************************
  79. ** \brief internal Or external PHY for Ethernet driver.
  80. **
  81. ** Indicate speed setting.
  82. ** Used on GD_ETH_Open() and GD_ETH_GetStat()
  83. *************************************************************************
  84. */
  85. typedef enum
  86. {
  87. GD_ETH_PHY_INTERNAL = 0, //!<Enet MAC use internal PHY
  88. GD_ETH_PHY_EXTERNAL_1, //!<Enet MAC use external PHY
  89. GD_ETH_PHY_EXTERNAL_2, //!<Enet MAC use external PHY
  90. GD_ETH_PHY_EXTERNAL_3, //!<Enet MAC use external PHY
  91. GD_ETH_PHY_EXTERNAL_4, //!<Enet MAC use external PHY
  92. GD_ETH_PHY_EXTERNAL_5, //!<Enet MAC use external PHY
  93. GD_ETH_PHY_EXTERNAL_6, //!<Enet MAC use external PHY
  94. GD_ETH_PHY_EXTERNAL_7, //!<Enet MAC use external PHY
  95. GD_ETH_PHY_EXTERNAL_8, //!<Enet MAC use external PHY
  96. GD_ETH_PHY_EXTERNAL_9, //!<Enet MAC use external PHY
  97. GD_ETH_PHY_EXTERNAL_10, //!<Enet MAC use external PHY
  98. GD_ETH_PHY_EXTERNAL_11, //!<Enet MAC use external PHY
  99. GD_ETH_PHY_EXTERNAL_12, //!<Enet MAC use external PHY
  100. GD_ETH_PHY_EXTERNAL_13, //!<Enet MAC use external PHY
  101. GD_ETH_PHY_EXTERNAL_14, //!<Enet MAC use external PHY
  102. GD_ETH_PHY_EXTERNAL_15, //!<Enet MAC use external PHY
  103. GD_ETH_PHY_EXTERNAL_16, //!<Enet MAC use external PHY
  104. GD_ETH_PHY_EXTERNAL_17, //!<Enet MAC use external PHY
  105. GD_ETH_PHY_EXTERNAL_18, //!<Enet MAC use external PHY
  106. GD_ETH_PHY_EXTERNAL_19, //!<Enet MAC use external PHY
  107. GD_ETH_PHY_EXTERNAL_20, //!<Enet MAC use external PHY
  108. GD_ETH_PHY_EXTERNAL_21, //!<Enet MAC use external PHY
  109. GD_ETH_PHY_EXTERNAL_22, //!<Enet MAC use external PHY
  110. GD_ETH_PHY_EXTERNAL_23, //!<Enet MAC use external PHY
  111. GD_ETH_PHY_EXTERNAL_24, //!<Enet MAC use external PHY
  112. GD_ETH_PHY_EXTERNAL_25, //!<Enet MAC use external PHY
  113. GD_ETH_PHY_EXTERNAL_26, //!<Enet MAC use external PHY
  114. GD_ETH_PHY_EXTERNAL_27, //!<Enet MAC use external PHY
  115. GD_ETH_PHY_EXTERNAL_28, //!<Enet MAC use external PHY
  116. GD_ETH_PHY_EXTERNAL_29, //!<Enet MAC use external PHY
  117. GD_ETH_PHY_EXTERNAL_30, //!<Enet MAC use external PHY
  118. GD_ETH_PHY_EXTERNAL_31, //!<Enet MAC use external PHY
  119. GD_ETH_PHY_EXTERNAL_AUTO, //!<Enet MAC use external PHY
  120. }GD_ETH_PHY_AddrE;
  121. /*!
  122. *************************************************************************
  123. ** \brief speed parameter for Ethernet driver.
  124. **
  125. ** Indicate speed setting.
  126. ** Used on GD_ETH_Open() and GD_ETH_GetStat()
  127. *************************************************************************
  128. */
  129. typedef enum
  130. {
  131. GD_ETH_SPEED_AUTO = 0, //!< Auto-negotiation
  132. GD_ETH_SPEED_10M = 10, //!< 10Mbps
  133. GD_ETH_SPEED_100M = 100, //!< 100Mbps
  134. GD_ETH_SPEED_1000M = 1000, //!< 1000Mbps
  135. }GD_ETH_SpeedE;
  136. /*!
  137. *************************************************************************
  138. ** \brief duplex mode parameter for Ethernet driver.
  139. **
  140. ** Indicate duplex mode setting.
  141. ** Used on GD_ETH_Open() and GD_ETH_GetStat()
  142. *************************************************************************
  143. */
  144. typedef enum
  145. {
  146. GD_ETH_HALF_DUPLEX = 0,//!< half-duplex mode
  147. GD_ETH_FULL_DUPLEX = 1 //!< full-duplex mode
  148. }GD_ETH_DuplexE;
  149. /*!
  150. *************************************************************************
  151. ** \brief local ethWorkMode.loop mode parameter for Ethernet driver.
  152. **
  153. ** Indicate local ethWorkMode.loop mode setting.
  154. ** Used on GD_ETH_Open()
  155. **
  156. ** \note local ethWorkMode.loop mode is for debug purpose. general applications
  157. ** should specify #GD_ETH_LOOP_OFF only.
  158. *************************************************************************
  159. */
  160. typedef enum
  161. {
  162. GD_ETH_LOOP_OFF = 0,//!< ethWorkMode.loop off
  163. GD_ETH_LOOP_ON_MAC = 1,//!< ethWorkMode.loop on LAN(MAC) device
  164. GD_ETH_LOOP_ON_PHY = 2 //!< ethWorkMode.loop on PHY device
  165. }GD_ETH_LoopE;
  166. /*!
  167. *************************************************************************
  168. ** \brief link status parameter for Ethernet driver.
  169. **
  170. ** Indicate link status.
  171. ** Used on GD_ETH_GetStat()
  172. *************************************************************************
  173. */
  174. typedef enum
  175. {
  176. GD_ETH_LINKDOWN = 0, //!< link is down
  177. GD_ETH_LINKUP = 1, //!< link is up
  178. GD_ETH_LINKUNKNOWN = 2 //!< link status is unknown
  179. }GD_ETH_LinkE;
  180. /*!
  181. *************************************************************************
  182. ** \brief detailed error status for Ethernet driver.
  183. **
  184. ** Indicate detailed error status.
  185. ** Used on GD_ETH_GetStat()
  186. **
  187. ** \note It depends on ethernet hardware. So other values may
  188. ** be added in future version.
  189. *************************************************************************
  190. */
  191. typedef enum
  192. {
  193. GD_ETH_ERR_NONE = 0x00000000,//!< No error, normal running
  194. GD_ETH_ERR_SW = 0x00000001,//!< Fatal error by software(bug)
  195. GD_ETH_ERR_FATAL = 0x00000001,//!< Fatal error by software(bug)
  196. GD_ETH_ERR_RX_BUS = 0x00000002,//!< Bus error in receiving
  197. GD_ETH_ERR_RWT_MAX = 0x00000008,//!< Excessive Watchdog timeout error
  198. GD_ETH_ERR_RX_BAND = 0x00000020,//!< Overflow error in receiving
  199. GD_ETH_ERR_RX_CONFIG = 0x00000080,//!< Feature not supported (Jumbo frames)
  200. GD_ETH_ERR_TX_BUS = 0x00000004,//!< Bus error in transmitting
  201. GD_ETH_ERR_TJT_MAX = 0x00000010,//!< Excessive Jabber timeout error
  202. GD_ETH_ERR_TX_BAND = 0x00000040,//!< Underflow error in transmitting
  203. GD_ETH_ERR_TX_CONFIG = 0x00000100,//!< Feature not supported (Jumbo frames)
  204. GD_ETH_ERR_LATE_COL = 0x00000200,//!< Excessive late collision error
  205. }GD_ETH_ErrorE;
  206. typedef enum
  207. {
  208. GD_ETH_UNINITIALIZE = 0x00000000,
  209. GD_ETH_FATAL_ERROR = 0x00000001,
  210. GD_ETH_UNKNOWN = 0x00000002,
  211. GD_ETH_RX_RUN = 0x00000004,
  212. GD_ETH_RX_SUSP_NOBUF = 0x00000008,
  213. GD_ETH_RX_SUSP_HWERR = 0x00000010,
  214. GD_ETH_RX_STOP = 0x00000020,
  215. GD_ETH_RX_STOP_HWERR = 0x00000040,
  216. GD_ETH_TX_RUN = 0x00000080,
  217. GD_ETH_TX_SUSP_NODAT = 0x00000100,
  218. GD_ETH_TX_SUSP_HWERR = 0x00000200,
  219. GD_ETH_TX_STOP = 0x00000400,
  220. GD_ETH_TX_STOP_HWERR = 0x00000800,
  221. } GD_ETH_StatE;
  222. typedef enum
  223. {
  224. GD_ETH_R = 0x00000001,
  225. GD_ETH_W = 0x00000002,
  226. GD_ETH_RW = 0x00000003
  227. } GD_ETH_RWE;
  228. /*!
  229. *************************************************************************
  230. ** \brief Frame end flag for Ethernet driver.
  231. **
  232. ** Indicate whether frame reaches to end or not. It is passed as an argument of
  233. ** read/write to indicate a boundary of ethernet frame.
  234. ** Used on GD_ETH_Write() and GD_ETH_Read().
  235. *************************************************************************
  236. */
  237. typedef enum
  238. {
  239. GD_ETH_FRAME_NOTEND = 0x00000000,//!< frame does not end.
  240. GD_ETH_FRAME_END = 0x00000001,//!< frame ends.
  241. GD_ETH_FRAME_TERM = 0x00000002 //!< frame ends on error
  242. } GD_ETH_FrameEndE;
  243. typedef enum
  244. {
  245. GD_ETH_PHY_IF_MODE_MII,
  246. GD_ETH_PHY_IF_MODE_GMII,
  247. GD_ETH_PHY_IF_MODE_SGMII,
  248. GD_ETH_PHY_IF_MODE_TBI,
  249. GD_ETH_PHY_IF_MODE_RMII,
  250. GD_ETH_PHY_IF_MODE_RGMII,
  251. GD_ETH_PHY_IF_MODE_RGMII_ID,
  252. GD_ETH_PHY_IF_MODE_RGMII_RXID,
  253. GD_ETH_PHY_IF_MODE_RGMII_TXID,
  254. GD_ETH_PHY_IF_MODE_RTBI,
  255. GD_ETH_PHY_IF_MODE_XGMII,
  256. GD_ETH_PHY_IF_MODE_NONE /* Must be last */
  257. }GD_ETH_PHY_IF_E; /* Phy Interface */
  258. //*****************************************************************************
  259. //*****************************************************************************
  260. //** Data Structures
  261. //*****************************************************************************
  262. //*****************************************************************************
  263. /*!
  264. *************************************************************************
  265. ** \brief Status information about Ethernet driver and link status.
  266. **
  267. ** This data structure contains information about the current ethernet
  268. ** driver settings and link status.
  269. **
  270. ** \sa GD_ETH_GetStat
  271. *************************************************************************
  272. */
  273. typedef struct
  274. {
  275. GBOOL bEnAutoNeg;
  276. GD_ETH_SpeedE speed; //!< speed setting
  277. GD_ETH_DuplexE duplex; //!< duplex mode setting
  278. GD_ETH_LoopE loopback; //!< local loopback mode setting
  279. GD_ETH_PHY_IF_E mode; //!<
  280. }GD_ETH_Work_ModeT;
  281. /*!
  282. *************************************************************************
  283. ** \brief Status information about Ethernet driver and link status.
  284. **
  285. ** This data structure contains information about the current ethernet
  286. ** driver settings and link status.
  287. **
  288. ** \sa GD_ETH_GetStat
  289. *************************************************************************
  290. */
  291. typedef struct
  292. {
  293. GD_ETH_SpeedE speed; //!< speed setting
  294. GD_ETH_DuplexE duplex; //!< duplex mode setting
  295. GD_ETH_LoopE loopback; //!< local loopback mode setting
  296. GD_ETH_PHY_IF_E mode; //!<
  297. GD_ETH_LinkE linkup; //!< link is up or not
  298. GD_ETH_ErrorE error; //!< error details (if available)
  299. }GD_ETH_StatParamsT;
  300. /*!
  301. *************************************************************************
  302. ** \brief Open parameters for Ethernet driver.
  303. **
  304. ** This data structure contains all the parameters for GD_ETH_Open().
  305. **
  306. ** \sa GD_ETH_Open
  307. *************************************************************************
  308. */
  309. typedef struct
  310. {
  311. GBOOL bHWReset;
  312. GD_GPIO_PIN_E phyreset;
  313. U8 phyType;
  314. } GD_ETH_InitParamsT;
  315. /*!
  316. *************************************************************************
  317. ** \brief Open parameters for Ethernet driver.
  318. **
  319. ** This data structure contains all the parameters for GD_ETH_Open().
  320. **
  321. ** \sa GD_ETH_Open
  322. *************************************************************************
  323. */
  324. typedef struct
  325. {
  326. GD_ETH_PHY_AddrE addr;
  327. GD_ETH_Work_ModeT workmode;
  328. GD_ETH_MacT macaddr;
  329. GD_ETH_IpT ipaddr;
  330. GBOOL supJumbo;
  331. } GD_ETH_OpenParamsT;
  332. //*****************************************************************************
  333. //*****************************************************************************
  334. //** Global Data
  335. //*****************************************************************************
  336. //*****************************************************************************
  337. //*****************************************************************************
  338. //*****************************************************************************
  339. //** API Functions
  340. //*****************************************************************************
  341. //*****************************************************************************
  342. #ifdef __cplusplus
  343. extern "C" {
  344. #endif
  345. GERR GD_ETH_Init(GD_ETH_InitParamsT* pInitParams);
  346. GERR GD_ETH_Exit(void);
  347. GERR GD_ETH_Open(GD_ETH_OpenParamsT* pOpenParams, GD_HANDLE* pHandle);
  348. GERR GD_ETH_Close(GD_HANDLE* pHandle);
  349. S32 GD_ETH_Read(GD_HANDLE handle, char *bufPtr, S32 size, GD_ETH_FrameEndE *pframe);
  350. S32 GD_ETH_Write(GD_HANDLE handle, const char* bufPtr, S32 size, GD_ETH_FrameEndE frame);
  351. S32 GD_ETH_Write_Enhance(GD_HANDLE handle, const char* bufPtr, S32 size, GD_ETH_FrameEndE frame);
  352. GERR GD_ETH_Write_HD(GD_HANDLE handle, const char* HbufPtr, S32 Hsize, const char* DbufPtr, S32 Dsize, GD_ETH_FrameEndE frame);
  353. GERR GD_ETH_Write_HD_Enhance(GD_HANDLE handle, const char* HbufPtr, S32 Hsize, const char* DbufPtr, S32 Dsize, GD_ETH_FrameEndE frame);
  354. GERR GD_ETH_SetEMACSpeed(GD_HANDLE handle, GD_ETH_SpeedE speed);
  355. GERR GD_ETH_SetMacAddress(GD_HANDLE handle, GD_ETH_MacT macAddress);
  356. GERR GD_ETH_GetMacAddress(GD_HANDLE handle, GD_ETH_MacT* pmacAddress);
  357. GERR GD_ETH_SetIPAddress(GD_HANDLE handle, GD_ETH_IpT ipAddress);
  358. GERR GD_ETH_GetIPAddress(GD_HANDLE handle, GD_ETH_IpT* pipAddress);
  359. GERR GD_ETH_GetPhyAddress(GD_HANDLE handle, U8* phy);
  360. GERR GD_ETH_GetStat(GD_HANDLE handle, GD_ETH_StatParamsT *statParamsPtr);
  361. GERR GD_ETH_CheckLink(GD_HANDLE handle);
  362. GERR GD_ETH_SleepTime(U32 ulTime);
  363. void GD_ETH_SetNetReceiveFuc(void (*eth_rcve)(volatile U8* recbuf,U16 len));
  364. #ifdef __cplusplus
  365. }
  366. #endif
  367. #endif /* _GD_ETHERNET_H_ */