/* Copyright (c) 2013 Broadcom Corporation All Rights Reserved <:label-BRCM:2013:DUAL/GPL:standard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation (the "GPL"). This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A copy of the GPL is available at http://www.broadcom.com/licenses/GPLv2.php, or by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. :> */ /******************************************************************************/ /* */ /* File Description: */ /* */ /* This header file defines all datatypes and functions exported for the */ /* Ethernet MAC */ /* */ /******************************************************************************/ #ifndef __UNIFIED_DRV_MAC_H #define __UNIFIED_DRV_MAC_H /*****************************************************************************/ /* */ /* Include files */ /* */ /*****************************************************************************/ #include "rdpa_types.h" /******************************************************************************/ /* */ /* Types and values definitions */ /* */ /******************************************************************************/ typedef struct { int32_t rxFlowEnable; int32_t txFlowEnable; }S_MAC_HWAPI_FLOW_CTRL; typedef enum { MAC_LPBK_NONE, MAC_LPBK_LOCAL, MAC_LPBK_REMOTE, MAC_LPBK_BOTH }MAC_LPBK; #ifndef _BYTE_ORDER_LITTLE_ENDIAN_ typedef struct { uint32_t reserved:26;// Reserved bits must be written with 0. A read returns an unknown value. uint32_t mac_link_stat:1;// Link status indication.Reset value is 0x0. uint32_t mac_tx_pause:1;// 1: MAC Tx pause enabled. 0: MAC Tx pause disabled. Reset value is 0x1. uint32_t mac_rx_pause:1;// 1: MAC Rx pause enabled. 0: MAC Rx pause disabled. Reset value is 0x1. uint32_t mac_duplex:1;//1: Half duplex. 0: Full duplex. Reset value is 0x0. uint32_t mac_speed:2;// 00: 10Mbps, 01: 100Mbps, 10: 1Gbps, 11: 2.5Gbps Reset value is 0x2. }S_HWAPI_MAC_STATUS; #else typedef struct { uint32_t mac_speed:2;// 00: 10Mbps, 01: 100Mbps, 10: 1Gbps, 11: 2.5Gbps Reset value is 0x2. uint32_t mac_duplex:1;//1: Half duplex. 0: Full duplex. Reset value is 0x0. uint32_t mac_rx_pause:1;// 1: MAC Rx pause enabled. 0: MAC Rx pause disabled. Reset value is 0x1. uint32_t mac_tx_pause:1;// 1: MAC Tx pause enabled. 0: MAC Tx pause disabled. Reset value is 0x1. uint32_t mac_link_stat:1;// Link status indication.Reset value is 0x0. uint32_t reserved:26;// Reserved bits must be written with 0. A read returns an unknown value. }S_HWAPI_MAC_STATUS; #endif /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_configuration */ /* */ /* Title: */ /* */ /* MAC Driver - get configuration */ /* */ /* Abstract: */ /* */ /* get the configuratin of a mac port ,note that current status of emac */ /* might be different than configuration when working in autoneg */ /* to get the current status use mac_hwapi_get_mac_status API */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* emac_cfg - structure holds the current configuration of the mac port */ /* */ /******************************************************************************/ void mac_hwapi_get_configuration(rdpa_emac emacNum,rdpa_emac_cfg_t *emac_cfg); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_configuration */ /* */ /* Title: */ /* */ /* MAC Driver - set configuration */ /* */ /* Abstract: */ /* */ /* set the configuratin of a mac port */ /* Input: */ /* */ /* emacNum - emac Port index */ /* emac_cfg - structure holds the current configuration of the mac port */ /* */ /* Output: */ /* */ /* */ /******************************************************************************/ void mac_hwapi_set_configuration(rdpa_emac emacNum,rdpa_emac_cfg_t *emac_cfg); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_duplex */ /* */ /* Title: */ /* */ /* MAC Driver - get port duplex */ /* */ /* Abstract: */ /* */ /* get the dulplex of a port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* full_duples : 1 = full dulplex,0 = half_duplex */ /* */ /******************************************************************************/ void mac_hwapi_get_duplex(rdpa_emac emacNum,int32_t *full_duplex); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_duplex */ /* */ /* Title: */ /* */ /* MAC Driver - set port duplex */ /* */ /* Abstract: */ /* */ /* set the dulplex of a port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* full_duples : 1 = full dulplex,0 = half_duplex */ /* */ /******************************************************************************/ void mac_hwapi_set_duplex(rdpa_emac emacNum,int32_t full_duplex); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_speed */ /* */ /* Title: */ /* */ /* MAC Driver - get port speed rate */ /* */ /* Abstract: */ /* */ /* get the speed of a port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* rate - enum of the speed */ /******************************************************************************/ void mac_hwapi_get_speed(rdpa_emac emacNum,rdpa_emac_rate *rate); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_speed */ /* */ /* Title: */ /* */ /* MAC Driver - set port speed rate */ /* */ /* Abstract: */ /* */ /* set the speed of a port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* rate - enum of the speed */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_set_speed(rdpa_emac emacNum,rdpa_emac_rate rate); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_external_conf */ /* */ /* Title: */ /* */ /* MAC Driver - en/disable external speed configuration */ /* */ /* Abstract: */ /* */ /* set port speed external configuration */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* enable - boolean enable */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_set_external_conf(rdpa_emac emacNum, int enable); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_rxtx_enable */ /* */ /* Title: */ /* */ /* MAC Driver - set tx and rx enable */ /* */ /* Abstract: */ /* */ /* get tx and rx enable */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* rxtxEnable - boolean enable */ /******************************************************************************/ void mac_hwapi_get_rxtx_enable(rdpa_emac emacNum,int32_t *rxEnable,int32_t *txEnable); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_rxtx_enable */ /* */ /* Title: */ /* */ /* MAC Driver - set tx and rx enable */ /* */ /* Abstract: */ /* */ /* set tx and rx enable */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* rxtxEnable - boolean enable */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_set_rxtx_enable(rdpa_emac emacNum,int32_t rxEnable,int32_t txEnable); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_sw_reset */ /* */ /* Title: */ /* */ /* MAC Driver - get port software reset */ /* */ /* Abstract: */ /* */ /* get the sw reset bit of emac port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* swReset : 1 = reset,0 = not reset */ /* */ /******************************************************************************/ void mac_hwapi_get_sw_reset(rdpa_emac emacNum,int32_t *swReset); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_sw_reset */ /* */ /* Title: */ /* */ /* MAC Driver - set port software reset */ /* */ /* Abstract: */ /* */ /* set the sw reset bit of emac port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* swReset : 1 = reset,0 = not reset */ /* */ /* Output: */ /* */ /* */ /******************************************************************************/ void mac_hwapi_set_sw_reset(rdpa_emac emacNum,int32_t swReset); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_tx_max_frame_len */ /* */ /* Title: */ /* */ /* MAC Driver - get port TX MTU */ /* */ /* Abstract: */ /* */ /* get the port maximum transmit unit size in bytes */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* maxTxFrameLen - size of frame in bytes */ /* */ /******************************************************************************/ void mac_hwapi_get_tx_max_frame_len(rdpa_emac emacNum,uint32_t *maxTxFrameLen ); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_tx_max_frame_len */ /* */ /* Title: */ /* */ /* MAC Driver - set port TX MTU */ /* */ /* Abstract: */ /* */ /* set the port maximum transmit unit size in bytes */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* maxTxFrameLen - size of frame in bytes */ /* */ /* Output: */ /* */ /* */ /******************************************************************************/ void mac_hwapi_set_tx_max_frame_len(rdpa_emac emacNum,uint32_t maxTxFrameLen ); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_rx_max_frame_len */ /* */ /* Title: */ /* */ /* MAC Driver - get port RX MTU */ /* */ /* Abstract: */ /* */ /* get the port maximum receive unit size in bytes */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* maxRxFrameLen - size of current MRU */ /* */ /******************************************************************************/ void mac_hwapi_get_rx_max_frame_len(rdpa_emac emacNum,uint32_t *maxRxFrameLen ); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_rx_max_frame_len */ /* */ /* Title: */ /* */ /* MAC Driver - set port RX MTU */ /* */ /* Abstract: */ /* */ /* set the port maximum receive unit size in bytes */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* maxRxFrameLen - size of current MRU */ /* */ /* Output: */ /* */ /* */ /******************************************************************************/ void mac_hwapi_set_rx_max_frame_len(rdpa_emac emacNum,uint32_t maxRxFrameLen ); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_tx_igp_len */ /* */ /* Title: */ /* */ /* MAC Driver - set port inter frame gap */ /* */ /* Abstract: */ /* */ /* set the inter frame gap size in bytes */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* txIpgLen - length in bytes */ /* */ /* Output: */ /* */ /* */ /******************************************************************************/ void mac_hwapi_set_tx_igp_len(rdpa_emac emacNum,uint32_t txIpgLen ); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_tx_igp_len */ /* */ /* Title: */ /* */ /* MAC Driver - get port inter frame gap */ /* */ /* Abstract: */ /* */ /* get the inter frame gap size in bytes */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* txIpgLen - length in bytes */ /* */ /******************************************************************************/ void mac_hwapi_get_tx_igp_len(rdpa_emac emacNum,uint32_t *txIpgLen ); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_mac_status */ /* */ /* Title: */ /* */ /* MAC Driver - set port status */ /* */ /* Abstract: */ /* */ /* set the status of mac */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* macStatus : */ /* */ /******************************************************************************/ void mac_hwapi_get_mac_status(rdpa_emac emacNum,S_HWAPI_MAC_STATUS *macStatus); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_flow_control */ /* */ /* Title: */ /* */ /* MAC Driver - get port flow control */ /* */ /* Abstract: */ /* */ /* get the flow control of a port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* flowControl - structure with parameters of tx and rx flow control */ /* */ /******************************************************************************/ void mac_hwapi_get_flow_control(rdpa_emac emacNum,S_MAC_HWAPI_FLOW_CTRL *flowControl); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_flow_control */ /* */ /* Title: */ /* */ /* MAC Driver - set port flow control */ /* */ /* Abstract: */ /* */ /* set the flow control of a port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* flowControl - structure with parameters of tx and rx flow control */ /* */ /* Output: */ /* */ /* */ /******************************************************************************/ void mac_hwapi_set_flow_control(rdpa_emac emacNum,S_MAC_HWAPI_FLOW_CTRL *flowControl); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_pause_params */ /* */ /* Title: */ /* */ /* MAC Driver - set port flow control */ /* */ /* Abstract: */ /* */ /* set the flow control of a port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* flowControl - structure with parameters of tx and rx flow control */ /* */ /* Output: */ /* */ /* */ /******************************************************************************/ void mac_hwapi_set_pause_params(rdpa_emac emacNum,int32_t pauseCtrlEnable,uint32_t pauseTimer,uint32_t pauseQuanta); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_rx_counters */ /* */ /* Title: */ /* */ /* MAC Driver - get the rx counters of port */ /* */ /* Abstract: */ /* */ /* get the rx counters of port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* rxCounters : structure filled with counters */ /* */ /******************************************************************************/ void mac_hwapi_get_rx_counters(rdpa_emac emacNum,rdpa_emac_rx_stat_t *rxCounters); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_tx_counters */ /* */ /* Title: */ /* */ /* MAC Driver - get the tx counters of port */ /* */ /* Abstract: */ /* */ /* get the tx counters of port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* txCounters : structure filled with counters */ /* */ /******************************************************************************/ void mac_hwapi_get_tx_counters(rdpa_emac emacNum,rdpa_emac_tx_stat_t *txCounters); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_init_emac */ /* */ /* Title: */ /* */ /* MAC Driver - init the emac to well known state */ /* */ /* Abstract: */ /* */ /* initialized the emac port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_init_emac(rdpa_emac emacNum); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_loopback */ /* */ /* Title: */ /* */ /* MAC Driver - init the emac to well known state */ /* */ /* Abstract: */ /* */ /* initialized the emac port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_get_loopback(rdpa_emac emacNum,MAC_LPBK *loopback); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_get_loopback */ /* */ /* Title: */ /* */ /* MAC Driver - init the emac to well known state */ /* */ /* Abstract: */ /* */ /* initialized the emac port */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_set_loopback(rdpa_emac emacNum,MAC_LPBK loopback); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_modify_flow_control_pause_pkt_addr */ /* */ /* Title: */ /* */ /* MAC Driver - Modify the Flow Control pause pkt source address */ /* */ /* Abstract: */ /* */ /* This function modifies the flow control pause pkt source address */ /* */ /* Input: */ /* */ /* emacNum - EMAC id (0-5) */ /* */ /* mac - Flow Control mac address */ /* */ /* Output: N/A */ /* */ /******************************************************************************/ void mac_hwapi_modify_flow_control_pause_pkt_addr ( rdpa_emac emacNum, bdmf_mac_t mac); void mac_hwapi_set_unimac_cfg(rdpa_emac emacNum, int32_t enabled); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_backpressure_ext */ /* */ /* Title: */ /* */ /* MAC Driver - set/reset backpressure to external switch */ /* */ /* Abstract: */ /* */ /* set/reset backpressure to external switch */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* enable - boolean enable */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_set_backpressure_ext(rdpa_emac emacNum, int32_t enable); /******************************************************************************/ /* */ /* Name: */ /* */ /* mac_hwapi_set_eee */ /* */ /* Title: */ /* */ /* MAC Driver - set eee configuration */ /* */ /* Abstract: */ /* */ /* set eee configuration */ /* */ /* Input: */ /* */ /* emacNum - emac Port index */ /* enable - boolean enable */ /* */ /* Output: */ /* */ /******************************************************************************/ void mac_hwapi_set_eee(rdpa_emac emacNum, int32_t enable); #endif