Skip to content

Commit 62ac0c6

Browse files
thaoluonguwKhiemNguyenT
authored andcommitted
hal: ra: Update Ethernet driver for RA board
Initial support for Ethernet and Ethernet phy driver Signed-off-by: Duy Phuong Hoang. Nguyen <[email protected]> Signed-off-by: Thao Luong <[email protected]>
1 parent cc730d2 commit 62ac0c6

File tree

13 files changed

+4360
-0
lines changed

13 files changed

+4360
-0
lines changed

drivers/ra/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,13 @@ if(CONFIG_USE_RA_FSP_SDHI)
8080
fsp/src/r_sdhi
8181
)
8282
endif()
83+
84+
zephyr_library_sources_ifdef(CONFIG_USE_RA_FSP_ETHER
85+
fsp/src/r_ether/r_ether.c)
86+
87+
if (CONFIG_USE_RA_FSP_ETHER)
88+
file(GLOB ether_phy_srcs
89+
"fsp/src/r_ether_phy/r_ether_phy.c"
90+
"fsp/src/r_ether_phy/targets/*/*.c")
91+
zephyr_sources(${ether_phy_srcs})
92+
endif()

drivers/ra/fsp/inc/api/r_ether_api.h

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
/*
2+
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3+
*
4+
* SPDX-License-Identifier: BSD-3-Clause
5+
*/
6+
7+
/*******************************************************************************************************************//**
8+
* @ingroup RENESAS_NETWORKING_INTERFACES
9+
* @defgroup ETHER_API Ethernet Interface
10+
* @brief Interface for Ethernet functions.
11+
*
12+
* @section ETHER_API_Summary Summary
13+
* The Ethernet interface provides Ethernet functionality.
14+
* The Ethernet interface supports the following features:
15+
* - Transmit/receive processing (Blocking and Non-Blocking)
16+
* - Callback function with returned event code
17+
* - Magic packet detection mode support
18+
* - Auto negotiation support
19+
* - Flow control support
20+
* - Multicast filtering support
21+
*
22+
*
23+
* @{
24+
**********************************************************************************************************************/
25+
26+
#ifndef R_ETHER_API_H
27+
#define R_ETHER_API_H
28+
29+
/***********************************************************************************************************************
30+
* Includes
31+
**********************************************************************************************************************/
32+
33+
/* Register definitions, common services and error codes. */
34+
#include "bsp_api.h"
35+
#include "r_ether_phy_api.h"
36+
37+
/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
38+
FSP_HEADER
39+
40+
/**********************************************************************************************************************
41+
* Macro definitions
42+
**********************************************************************************************************************/
43+
44+
/**********************************************************************************************************************
45+
* Typedef definitions
46+
**********************************************************************************************************************/
47+
48+
/** Wake on LAN */
49+
typedef enum e_ether_wake_on_lan
50+
{
51+
ETHER_WAKE_ON_LAN_DISABLE = 0, ///< Disable Wake on LAN
52+
ETHER_WAKE_ON_LAN_ENABLE = 1, ///< Enable Wake on LAN
53+
} ether_wake_on_lan_t;
54+
55+
/** Flow control functionality */
56+
typedef enum e_ether_flow_control
57+
{
58+
ETHER_FLOW_CONTROL_DISABLE = 0, ///< Disable flow control functionality
59+
ETHER_FLOW_CONTROL_ENABLE = 1, ///< Enable flow control functionality with pause frames
60+
} ether_flow_control_t;
61+
62+
/** Multicast Filter */
63+
typedef enum e_ether_multicast
64+
{
65+
ETHER_MULTICAST_DISABLE = 0, ///< Disable reception of multicast frames
66+
ETHER_MULTICAST_ENABLE = 1, ///< Enable reception of multicast frames
67+
} ether_multicast_t;
68+
69+
/** Promiscuous Mode */
70+
typedef enum e_ether_promiscuous
71+
{
72+
ETHER_PROMISCUOUS_DISABLE = 0, ///< Only receive packets with current MAC address, multicast, and broadcast
73+
ETHER_PROMISCUOUS_ENABLE = 1, ///< Receive all packets
74+
} ether_promiscuous_t;
75+
76+
/** Zero copy */
77+
typedef enum e_ether_zerocopy
78+
{
79+
ETHER_ZEROCOPY_DISABLE = 0, ///< Disable zero copy in Read/Write function
80+
ETHER_ZEROCOPY_ENABLE = 1, ///< Enable zero copy in Read/Write function
81+
} ether_zerocopy_t;
82+
83+
typedef enum e_ether_padding
84+
{
85+
ETHER_PADDING_DISABLE = 0,
86+
ETHER_PADDING_1BYTE = 1,
87+
ETHER_PADDING_2BYTE = 2,
88+
ETHER_PADDING_3BYTE = 3,
89+
} ether_padding_t;
90+
91+
#ifndef BSP_OVERRIDE_ETHER_EVENT_T
92+
93+
/** Event code of callback function */
94+
typedef enum e_ether_event
95+
{
96+
ETHER_EVENT_WAKEON_LAN, ///< Magic packet detection event
97+
ETHER_EVENT_LINK_ON, ///< Link up detection event
98+
ETHER_EVENT_LINK_OFF, ///< Link down detection event
99+
ETHER_EVENT_INTERRUPT, ///< Interrupt event
100+
} ether_event_t;
101+
#endif
102+
103+
#ifndef BSP_OVERRIDE_ETHER_CALLBACK_ARGS_T
104+
105+
/** Callback function parameter data */
106+
typedef struct st_ether_callback_args
107+
{
108+
uint32_t channel; ///< Device channel number
109+
ether_event_t event; ///< Event code
110+
uint32_t status_ecsr; ///< ETHERC status register for interrupt handler
111+
uint32_t status_eesr; ///< ETHERC/EDMAC status register for interrupt handler
112+
113+
void const * p_context; ///< Placeholder for user data. Set in @ref ether_api_t::open function in @ref ether_cfg_t.
114+
} ether_callback_args_t;
115+
#endif
116+
117+
/** Control block. Allocate an instance specific control block to pass into the API calls.
118+
*/
119+
typedef void ether_ctrl_t;
120+
121+
/** Configuration parameters. */
122+
typedef struct st_ether_cfg
123+
{
124+
uint8_t channel; ///< Channel
125+
ether_zerocopy_t zerocopy; ///< Zero copy enable or disable in Read/Write function
126+
ether_multicast_t multicast; ///< Multicast enable or disable
127+
ether_promiscuous_t promiscuous; ///< Promiscuous mode enable or disable
128+
ether_flow_control_t flow_control; ///< Flow control functionally enable or disable
129+
ether_padding_t padding; ///< Padding length inserted into the received Ethernet frame.
130+
uint32_t padding_offset; ///< Offset of the padding inserted into the received Ethernet frame.
131+
uint32_t broadcast_filter; ///< Limit of the number of broadcast frames received continuously
132+
uint8_t * p_mac_address; ///< Pointer of MAC address
133+
134+
uint8_t num_tx_descriptors; ///< Number of transmission descriptor
135+
uint8_t num_rx_descriptors; ///< Number of receive descriptor
136+
137+
uint8_t ** pp_ether_buffers; ///< Transmit and receive buffer
138+
139+
uint32_t ether_buffer_size; ///< Size of transmit and receive buffer
140+
141+
IRQn_Type irq; ///< Interrupt number
142+
uint32_t interrupt_priority; ///< Interrupt priority
143+
144+
void (* p_callback)(ether_callback_args_t * p_args); ///< Callback provided when an ISR occurs.
145+
146+
ether_phy_instance_t const * p_ether_phy_instance; ///< Pointer to ETHER_PHY instance
147+
148+
/** Placeholder for user data. Passed to the user callback in ether_callback_args_t. */
149+
void const * p_context; ///< Placeholder for user data.
150+
void const * p_extend; ///< Placeholder for user extension.
151+
} ether_cfg_t;
152+
153+
/** Functions implemented at the HAL layer will follow this API. */
154+
typedef struct st_ether_api
155+
{
156+
/** Open driver.
157+
*
158+
* @param[in] p_ctrl Pointer to control structure.
159+
* @param[in] p_cfg Pointer to pin configuration structure.
160+
*/
161+
fsp_err_t (* open)(ether_ctrl_t * const p_ctrl, ether_cfg_t const * const p_cfg);
162+
163+
/** Close driver.
164+
*
165+
* @param[in] p_ctrl Pointer to control structure.
166+
*/
167+
fsp_err_t (* close)(ether_ctrl_t * const p_ctrl);
168+
169+
/** Read packet if data is available.
170+
*
171+
* @param[in] p_ctrl Pointer to control structure.
172+
* @param[in] p_buffer Pointer to where to store read data.
173+
* @param[in] length_bytes Number of bytes in buffer
174+
*/
175+
fsp_err_t (* read)(ether_ctrl_t * const p_ctrl, void * const p_buffer, uint32_t * const length_bytes);
176+
177+
/** Release rx buffer from buffer pool process in zero-copy read operation.
178+
*
179+
* @param[in] p_ctrl Pointer to control structure.
180+
*/
181+
fsp_err_t (* bufferRelease)(ether_ctrl_t * const p_ctrl);
182+
183+
/** Update the buffer pointer in the current receive descriptor.
184+
*
185+
* @param[in] p_ctrl Pointer to control structure.
186+
* @param[in] p_buffer New address to write into the rx buffer descriptor.
187+
*/
188+
fsp_err_t (* rxBufferUpdate)(ether_ctrl_t * const p_ctrl, void * const p_buffer);
189+
190+
/** Write packet.
191+
*
192+
* @param[in] p_ctrl Pointer to control structure.
193+
* @param[in] p_buffer Pointer to data to write.
194+
* @param[in] frame_length Send ethernet frame size (without 4 bytes of CRC data size).
195+
*/
196+
fsp_err_t (* write)(ether_ctrl_t * const p_ctrl, void * const p_buffer, uint32_t const frame_length);
197+
198+
/** Process link.
199+
*
200+
* @param[in] p_ctrl Pointer to control structure.
201+
*/
202+
fsp_err_t (* linkProcess)(ether_ctrl_t * const p_ctrl);
203+
204+
/** Enable magic packet detection.
205+
*
206+
* @param[in] p_ctrl Pointer to control structure.
207+
*/
208+
fsp_err_t (* wakeOnLANEnable)(ether_ctrl_t * const p_ctrl);
209+
210+
/** Get the address of the most recently sent buffer.
211+
*
212+
* @param[in] p_ctrl Pointer to control structure.
213+
* @param[out] p_buffer_address Pointer to the address of the most recently sent buffer.
214+
*/
215+
fsp_err_t (* txStatusGet)(ether_ctrl_t * const p_ctrl, void * const p_buffer_address);
216+
217+
/**
218+
* Specify callback function and optional context pointer and working memory pointer.
219+
*
220+
* @param[in] p_ctrl Pointer to the ETHER control block.
221+
* @param[in] p_callback Callback function
222+
* @param[in] p_context Pointer to send to callback function
223+
* @param[in] p_working_memory Pointer to volatile memory where callback structure can be allocated.
224+
* Callback arguments allocated here are only valid during the callback.
225+
*/
226+
fsp_err_t (* callbackSet)(ether_ctrl_t * const p_ctrl, void (* p_callback)(ether_callback_args_t *),
227+
void const * const p_context, ether_callback_args_t * const p_callback_memory);
228+
} ether_api_t;
229+
230+
/** This structure encompasses everything that is needed to use an instance of this interface. */
231+
typedef struct st_ether_instance
232+
{
233+
ether_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance
234+
ether_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance
235+
ether_api_t const * p_api; ///< Pointer to the API structure for this instance
236+
} ether_instance_t;
237+
238+
/*******************************************************************************************************************//**
239+
* @} (end defgroup ETHER_API)
240+
**********************************************************************************************************************/
241+
242+
/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
243+
FSP_FOOTER
244+
245+
#endif /* R_ETHERNET_API_H */

0 commit comments

Comments
 (0)