1 /** 2 ****************************************************************************** 3 * @file stm32h5xx_hal_eth_ex.h 4 * @author MCD Application Team 5 * @brief Header file of ETH HAL Extended module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2023 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32H5xx_HAL_ETH_EX_H 21 #define STM32H5xx_HAL_ETH_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 #if defined(ETH) 28 29 /* Includes ------------------------------------------------------------------*/ 30 #include "stm32h5xx_hal_def.h" 31 32 /** @addtogroup STM32H5xx_HAL_Driver 33 * @{ 34 */ 35 36 /** @addtogroup ETHEx 37 * @{ 38 */ 39 40 /* Exported types ------------------------------------------------------------*/ 41 /** @defgroup ETHEx_Exported_Types ETHEx Exported Types 42 * @{ 43 */ 44 45 /** 46 * @brief ETH RX VLAN structure definition 47 */ 48 typedef struct 49 { 50 FunctionalState InnerVLANTagInStatus; /*!< Enables or disables Inner VLAN Tag in Rx Status */ 51 52 uint32_t StripInnerVLANTag; /*!< Sets the Inner VLAN Tag Stripping on Receive 53 This parameter can be a value of 54 @ref ETHEx_Rx_Inner_VLAN_Tag_Stripping */ 55 56 FunctionalState InnerVLANTag; /*!< Enables or disables Inner VLAN Tag */ 57 58 FunctionalState DoubleVLANProcessing; /*!< Enable or Disable double VLAN processing */ 59 60 FunctionalState VLANTagHashTableMatch; /*!< Enable or Disable VLAN Tag Hash Table Match */ 61 62 FunctionalState VLANTagInStatus; /*!< Enable or Disable VLAN Tag in Rx status */ 63 64 uint32_t StripVLANTag; /*!< Set the VLAN Tag Stripping on Receive 65 This parameter can be a value of @ref ETHEx_Rx_VLAN_Tag_Stripping */ 66 67 uint32_t VLANTypeCheck; /*!< Enable or Disable VLAN Type Check 68 This parameter can be a value of @ref ETHEx_VLAN_Type_Check */ 69 70 FunctionalState VLANTagInverceMatch; /*!< Enable or disable VLAN Tag Inverse Match */ 71 } ETH_RxVLANConfigTypeDef; 72 /** 73 * 74 */ 75 76 /** 77 * @brief ETH TX VLAN structure definition 78 */ 79 typedef struct 80 { 81 FunctionalState SourceTxDesc; /*!< Enable or Disable VLAN tag source from DMA tx descriptors */ 82 83 FunctionalState SVLANType; /*!< Enable or Disable insertion of SVLAN type */ 84 85 uint32_t VLANTagControl; /*!< Sets the VLAN tag control in tx packets 86 This parameter can be a value of @ref ETHEx_VLAN_Tag_Control */ 87 } ETH_TxVLANConfigTypeDef; 88 /** 89 * 90 */ 91 92 /** 93 * @brief ETH L3 filter structure definition 94 */ 95 typedef struct 96 { 97 uint32_t Protocol; /*!< Sets the L3 filter protocol to IPv4 or IPv6 98 This parameter can be a value of @ref ETHEx_L3_Protocol */ 99 100 uint32_t SrcAddrFilterMatch; /*!< Sets the L3 filter source address match 101 This parameter can be a value of @ref ETHEx_L3_Source_Match */ 102 103 uint32_t DestAddrFilterMatch; /*!< Sets the L3 filter destination address match 104 This parameter can be a value of @ref ETHEx_L3_Destination_Match */ 105 106 uint32_t SrcAddrHigherBitsMatch; /*!< Sets the L3 filter source address higher bits match 107 This parameter can be a value from 0 to 31 */ 108 109 uint32_t DestAddrHigherBitsMatch; /*!< Sets the L3 filter destination address higher bits match 110 This parameter can be a value from 0 to 31 */ 111 112 uint32_t Ip4SrcAddr; /*!< Sets the L3 filter IPv4 source address if IPv4 protocol is used 113 This parameter can be a value from 0x0 to 0xFFFFFFFF */ 114 115 uint32_t Ip4DestAddr; /*!< Sets the L3 filter IPv4 destination address if IPv4 protocol is used 116 This parameter can be a value from 0 to 0xFFFFFFFF */ 117 118 uint32_t Ip6Addr[4]; /*!< Sets the L3 filter IPv6 address if IPv6 protocol is used 119 This parameter must be a table of 4 words (4* 32 bits) */ 120 } ETH_L3FilterConfigTypeDef; 121 /** 122 * 123 */ 124 125 /** 126 * @brief ETH L4 filter structure definition 127 */ 128 typedef struct 129 { 130 uint32_t Protocol; /*!< Sets the L4 filter protocol to TCP or UDP 131 This parameter can be a value of @ref ETHEx_L4_Protocol */ 132 133 uint32_t SrcPortFilterMatch; /*!< Sets the L4 filter source port match 134 This parameter can be a value of @ref ETHEx_L4_Source_Match */ 135 136 uint32_t DestPortFilterMatch; /*!< Sets the L4 filter destination port match 137 This parameter can be a value of @ref ETHEx_L4_Destination_Match */ 138 139 uint32_t SourcePort; /*!< Sets the L4 filter source port 140 This parameter must be a value from 0x0 to 0xFFFF */ 141 142 uint32_t DestinationPort; /*!< Sets the L4 filter destination port 143 This parameter must be a value from 0x0 to 0xFFFF */ 144 } ETH_L4FilterConfigTypeDef; 145 /** 146 * 147 */ 148 149 /** 150 * @} 151 */ 152 153 /* Exported constants --------------------------------------------------------*/ 154 /** @defgroup ETHEx_Exported_Constants ETHEx Exported Constants 155 * @{ 156 */ 157 158 /** @defgroup ETHEx_LPI_Event ETHEx LPI Event 159 * @{ 160 */ 161 #define ETH_TX_LPI_ENTRY ETH_MACLCSR_TLPIEN 162 #define ETH_TX_LPI_EXIT ETH_MACLCSR_TLPIEX 163 #define ETH_RX_LPI_ENTRY ETH_MACLCSR_RLPIEN 164 #define ETH_RX_LPI_EXIT ETH_MACLCSR_RLPIEX 165 /** 166 * @} 167 */ 168 169 /** @defgroup ETHEx_L3_Filter ETHEx L3 Filter 170 * @{ 171 */ 172 #define ETH_L3_FILTER_0 0x00000000U 173 #define ETH_L3_FILTER_1 0x0000000CU 174 /** 175 * @} 176 */ 177 178 /** @defgroup ETHEx_L4_Filter ETHEx L4 Filter 179 * @{ 180 */ 181 #define ETH_L4_FILTER_0 0x00000000U 182 #define ETH_L4_FILTER_1 0x0000000CU 183 /** 184 * @} 185 */ 186 187 /** @defgroup ETHEx_L3_Protocol ETHEx L3 Protocol 188 * @{ 189 */ 190 #define ETH_L3_IPV6_MATCH ETH_MACL3L4CR_L3PEN 191 #define ETH_L3_IPV4_MATCH 0x00000000U 192 /** 193 * @} 194 */ 195 196 /** @defgroup ETHEx_L3_Source_Match ETHEx L3 Source Match 197 * @{ 198 */ 199 #define ETH_L3_SRC_ADDR_PERFECT_MATCH_ENABLE ETH_MACL3L4CR_L3SAM 200 #define ETH_L3_SRC_ADDR_INVERSE_MATCH_ENABLE (ETH_MACL3L4CR_L3SAM | ETH_MACL3L4CR_L3SAIM) 201 #define ETH_L3_SRC_ADDR_MATCH_DISABLE 0x00000000U 202 /** 203 * @} 204 */ 205 206 /** @defgroup ETHEx_L3_Destination_Match ETHEx L3 Destination Match 207 * @{ 208 */ 209 #define ETH_L3_DEST_ADDR_PERFECT_MATCH_ENABLE ETH_MACL3L4CR_L3DAM 210 #define ETH_L3_DEST_ADDR_INVERSE_MATCH_ENABLE (ETH_MACL3L4CR_L3DAM | ETH_MACL3L4CR_L3DAIM) 211 #define ETH_L3_DEST_ADDR_MATCH_DISABLE 0x00000000U 212 /** 213 * @} 214 */ 215 216 /** @defgroup ETHEx_L4_Protocol ETHEx L4 Protocol 217 * @{ 218 */ 219 #define ETH_L4_UDP_MATCH ETH_MACL3L4CR_L4PEN 220 #define ETH_L4_TCP_MATCH 0x00000000U 221 /** 222 * @} 223 */ 224 225 /** @defgroup ETHEx_L4_Source_Match ETHEx L4 Source Match 226 * @{ 227 */ 228 #define ETH_L4_SRC_PORT_PERFECT_MATCH_ENABLE ETH_MACL3L4CR_L4SPM 229 #define ETH_L4_SRC_PORT_INVERSE_MATCH_ENABLE (ETH_MACL3L4CR_L4SPM |ETH_MACL3L4CR_L4SPIM) 230 #define ETH_L4_SRC_PORT_MATCH_DISABLE 0x00000000U 231 /** 232 * @} 233 */ 234 235 /** @defgroup ETHEx_L4_Destination_Match ETHEx L4 Destination Match 236 * @{ 237 */ 238 #define ETH_L4_DEST_PORT_PERFECT_MATCH_ENABLE ETH_MACL3L4CR_L4DPM 239 #define ETH_L4_DEST_PORT_INVERSE_MATCH_ENABLE (ETH_MACL3L4CR_L4DPM | ETH_MACL3L4CR_L4DPIM) 240 #define ETH_L4_DEST_PORT_MATCH_DISABLE 0x00000000U 241 /** 242 * @} 243 */ 244 245 /** @defgroup ETHEx_Rx_Inner_VLAN_Tag_Stripping ETHEx Rx Inner VLAN Tag Stripping 246 * @{ 247 */ 248 #define ETH_INNERVLANTAGRXSTRIPPING_NONE ETH_MACVTR_EIVLS_DONOTSTRIP 249 #define ETH_INNERVLANTAGRXSTRIPPING_IFPASS ETH_MACVTR_EIVLS_STRIPIFPASS 250 #define ETH_INNERVLANTAGRXSTRIPPING_IFFAILS ETH_MACVTR_EIVLS_STRIPIFFAILS 251 #define ETH_INNERVLANTAGRXSTRIPPING_ALWAYS ETH_MACVTR_EIVLS_ALWAYSSTRIP 252 /** 253 * @} 254 */ 255 256 /** @defgroup ETHEx_Rx_VLAN_Tag_Stripping ETHEx Rx VLAN Tag Stripping 257 * @{ 258 */ 259 #define ETH_VLANTAGRXSTRIPPING_NONE ETH_MACVTR_EVLS_DONOTSTRIP 260 #define ETH_VLANTAGRXSTRIPPING_IFPASS ETH_MACVTR_EVLS_STRIPIFPASS 261 #define ETH_VLANTAGRXSTRIPPING_IFFAILS ETH_MACVTR_EVLS_STRIPIFFAILS 262 #define ETH_VLANTAGRXSTRIPPING_ALWAYS ETH_MACVTR_EVLS_ALWAYSSTRIP 263 /** 264 * @} 265 */ 266 267 /** @defgroup ETHEx_VLAN_Type_Check ETHEx VLAN Type Check 268 * @{ 269 */ 270 #define ETH_VLANTYPECHECK_DISABLE ETH_MACVTR_DOVLTC 271 #define ETH_VLANTYPECHECK_SVLAN (ETH_MACVTR_ERSVLM | ETH_MACVTR_ESVL) 272 #define ETH_VLANTYPECHECK_CVLAN 0x00000000U 273 /** 274 * @} 275 */ 276 277 /** @defgroup ETHEx_VLAN_Tag_Control ETHEx_VLAN_Tag_Control 278 * @{ 279 */ 280 #define ETH_VLANTAGCONTROL_NONE (ETH_MACVIR_VLP | ETH_MACVIR_VLC_NOVLANTAG) 281 #define ETH_VLANTAGCONTROL_DELETE (ETH_MACVIR_VLP | ETH_MACVIR_VLC_VLANTAGDELETE) 282 #define ETH_VLANTAGCONTROL_INSERT (ETH_MACVIR_VLP | ETH_MACVIR_VLC_VLANTAGINSERT) 283 #define ETH_VLANTAGCONTROL_REPLACE (ETH_MACVIR_VLP | ETH_MACVIR_VLC_VLANTAGREPLACE) 284 /** 285 * @} 286 */ 287 288 /** @defgroup ETHEx_Tx_VLAN_Tag ETHEx Tx VLAN Tag 289 * @{ 290 */ 291 #define ETH_INNER_TX_VLANTAG 0x00000001U 292 #define ETH_OUTER_TX_VLANTAG 0x00000000U 293 /** 294 * @} 295 */ 296 297 /** 298 * @} 299 */ 300 301 /* Exported functions --------------------------------------------------------*/ 302 /** @addtogroup ETHEx_Exported_Functions 303 * @{ 304 */ 305 306 /** @addtogroup ETHEx_Exported_Functions_Group1 307 * @{ 308 */ 309 /* MAC ARP Offloading APIs ***************************************************/ 310 void HAL_ETHEx_EnableARPOffload(ETH_HandleTypeDef *heth); 311 void HAL_ETHEx_DisableARPOffload(ETH_HandleTypeDef *heth); 312 void HAL_ETHEx_SetARPAddressMatch(ETH_HandleTypeDef *heth, uint32_t IpAddress); 313 314 /* MAC L3 L4 Filtering APIs ***************************************************/ 315 void HAL_ETHEx_EnableL3L4Filtering(ETH_HandleTypeDef *heth); 316 void HAL_ETHEx_DisableL3L4Filtering(ETH_HandleTypeDef *heth); 317 HAL_StatusTypeDef HAL_ETHEx_GetL3FilterConfig(ETH_HandleTypeDef *heth, uint32_t Filter, 318 ETH_L3FilterConfigTypeDef *pL3FilterConfig); 319 HAL_StatusTypeDef HAL_ETHEx_GetL4FilterConfig(ETH_HandleTypeDef *heth, uint32_t Filter, 320 ETH_L4FilterConfigTypeDef *pL4FilterConfig); 321 HAL_StatusTypeDef HAL_ETHEx_SetL3FilterConfig(ETH_HandleTypeDef *heth, uint32_t Filter, 322 ETH_L3FilterConfigTypeDef *pL3FilterConfig); 323 HAL_StatusTypeDef HAL_ETHEx_SetL4FilterConfig(ETH_HandleTypeDef *heth, uint32_t Filter, 324 ETH_L4FilterConfigTypeDef *pL4FilterConfig); 325 326 /* MAC VLAN Processing APIs ************************************************/ 327 void HAL_ETHEx_EnableVLANProcessing(ETH_HandleTypeDef *heth); 328 void HAL_ETHEx_DisableVLANProcessing(ETH_HandleTypeDef *heth); 329 HAL_StatusTypeDef HAL_ETHEx_GetRxVLANConfig(ETH_HandleTypeDef *heth, ETH_RxVLANConfigTypeDef *pVlanConfig); 330 HAL_StatusTypeDef HAL_ETHEx_SetRxVLANConfig(ETH_HandleTypeDef *heth, ETH_RxVLANConfigTypeDef *pVlanConfig); 331 void HAL_ETHEx_SetVLANHashTable(ETH_HandleTypeDef *heth, uint32_t VLANHashTable); 332 HAL_StatusTypeDef HAL_ETHEx_GetTxVLANConfig(ETH_HandleTypeDef *heth, uint32_t VLANTag, 333 ETH_TxVLANConfigTypeDef *pVlanConfig); 334 HAL_StatusTypeDef HAL_ETHEx_SetTxVLANConfig(ETH_HandleTypeDef *heth, uint32_t VLANTag, 335 ETH_TxVLANConfigTypeDef *pVlanConfig); 336 void HAL_ETHEx_SetTxVLANIdentifier(ETH_HandleTypeDef *heth, uint32_t VLANTag, uint32_t VLANIdentifier); 337 338 /* Energy Efficient Ethernet APIs *********************************************/ 339 void HAL_ETHEx_EnterLPIMode(ETH_HandleTypeDef *heth, FunctionalState TxAutomate, 340 FunctionalState TxClockStop); 341 void HAL_ETHEx_ExitLPIMode(ETH_HandleTypeDef *heth); 342 uint32_t HAL_ETHEx_GetMACLPIEvent(const ETH_HandleTypeDef *heth); 343 344 /** 345 * @} 346 */ 347 348 /** 349 * @} 350 */ 351 352 /** 353 * @} 354 */ 355 356 /** 357 * @} 358 */ 359 360 #endif /* ETH */ 361 362 #ifdef __cplusplus 363 } 364 #endif 365 366 #endif /* STM32H5xx_HAL_ETH_EX_H */ 367