xref: /freebsd/sys/dev/al_eth/al_init_eth_lm.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
17902c8dcSWojciech Macek /*-
27902c8dcSWojciech Macek  * Copyright (c) 2015,2016 Annapurna Labs Ltd. and affiliates
37902c8dcSWojciech Macek  * All rights reserved.
47902c8dcSWojciech Macek  *
57902c8dcSWojciech Macek  * Developed by Semihalf.
67902c8dcSWojciech Macek  *
77902c8dcSWojciech Macek  * Redistribution and use in source and binary forms, with or without
87902c8dcSWojciech Macek  * modification, are permitted provided that the following conditions
97902c8dcSWojciech Macek  * are met:
107902c8dcSWojciech Macek  * 1. Redistributions of source code must retain the above copyright
117902c8dcSWojciech Macek  *    notice, this list of conditions and the following disclaimer.
127902c8dcSWojciech Macek  * 2. Redistributions in binary form must reproduce the above copyright
137902c8dcSWojciech Macek  *    notice, this list of conditions and the following disclaimer in the
147902c8dcSWojciech Macek  *    documentation and/or other materials provided with the distribution.
157902c8dcSWojciech Macek  *
167902c8dcSWojciech Macek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
177902c8dcSWojciech Macek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
187902c8dcSWojciech Macek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
197902c8dcSWojciech Macek  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
207902c8dcSWojciech Macek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
217902c8dcSWojciech Macek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
227902c8dcSWojciech Macek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
237902c8dcSWojciech Macek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
247902c8dcSWojciech Macek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
257902c8dcSWojciech Macek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
267902c8dcSWojciech Macek  * SUCH DAMAGE.
277902c8dcSWojciech Macek  */
287902c8dcSWojciech Macek 
297902c8dcSWojciech Macek /**
307902c8dcSWojciech Macek  *  Ethernet
317902c8dcSWojciech Macek  *  @{
327902c8dcSWojciech Macek  * @file   al_init_eth_lm.h
337902c8dcSWojciech Macek  *
347902c8dcSWojciech Macek  * @brief ethernet link management common utilities
357902c8dcSWojciech Macek  *
367902c8dcSWojciech Macek  * Common operation example:
377902c8dcSWojciech Macek  * @code
387902c8dcSWojciech Macek  *      int main()
397902c8dcSWojciech Macek  *      {
407902c8dcSWojciech Macek  *		struct al_eth_lm_context lm_context;
417902c8dcSWojciech Macek  *		struct al_eth_lm_init_params lm_params;
427902c8dcSWojciech Macek  *		enum al_eth_lm_link_mode old_mode;
437902c8dcSWojciech Macek  *		enum al_eth_lm_link_mode new_mode;
447902c8dcSWojciech Macek  *		al_bool	fault;
457902c8dcSWojciech Macek  *		al_bool				link_up;
467902c8dcSWojciech Macek  *		int rc = 0;
477902c8dcSWojciech Macek  *
487902c8dcSWojciech Macek  *		lm_params.adapter = hal_adapter;
497902c8dcSWojciech Macek  *		lm_params.serdes_obj = serdes;
507902c8dcSWojciech Macek  *		lm_params.grp = grp;
517902c8dcSWojciech Macek  *		lm_params.lane = lane;
527902c8dcSWojciech Macek  *		lm_params.sfp_detection = true;
537902c8dcSWojciech Macek  *		lm_params.link_training = true;
547902c8dcSWojciech Macek  *		lm_params.rx_equal = true
557902c8dcSWojciech Macek  *		lm_params.static_values = true;
567902c8dcSWojciech Macek  *		lm_params.kr_fec_enable = false;
577902c8dcSWojciech Macek  *		lm_params.eeprom_read = &my_eeprom_read;
587902c8dcSWojciech Macek  *		lm_params.eeprom_context = context;
597902c8dcSWojciech Macek  *		lm_params.get_random_byte = &my_rand_byte;
607902c8dcSWojciech Macek  *		lm_params.default_mode = AL_ETH_LM_MODE_10G_DA;
617902c8dcSWojciech Macek  *
627902c8dcSWojciech Macek  *		al_eth_lm_init(&lm_context, &lm_params);
637902c8dcSWojciech Macek  *
647902c8dcSWojciech Macek  *		rc = al_eth_lm_link_detection(&lm_context, &fault, &old_mode, &new_mode);
657902c8dcSWojciech Macek  *		if (fault == false)
667902c8dcSWojciech Macek  *			return; // in this case the link is still up
677902c8dcSWojciech Macek  *
687902c8dcSWojciech Macek  *		if (rc) {
697902c8dcSWojciech Macek  *			printf("link detection failed on error\n");
707902c8dcSWojciech Macek  *			return;
717902c8dcSWojciech Macek  *		}
727902c8dcSWojciech Macek  *
737902c8dcSWojciech Macek  *		if (old_mode != new_mode) {
747902c8dcSWojciech Macek  *			 // perform serdes configuration if needed
757902c8dcSWojciech Macek  *
767902c8dcSWojciech Macek  *			 // mac stop / start / config if needed
777902c8dcSWojciech Macek  *		}
787902c8dcSWojciech Macek  *
797902c8dcSWojciech Macek  *		spin_lock(lock);
807902c8dcSWojciech Macek  *		rc = al_eth_lm_link_establish($lm_context, &link_up);
817902c8dcSWojciech Macek  *		spin_unlock(lock);
827902c8dcSWojciech Macek  *		if (rc) {
837902c8dcSWojciech Macek  *			printf("establish link failed\n");
847902c8dcSWojciech Macek  *			return;
857902c8dcSWojciech Macek  *		}
867902c8dcSWojciech Macek  *
877902c8dcSWojciech Macek  *		if (link_up)
887902c8dcSWojciech Macek  *			printf("Link established successfully\n");
897902c8dcSWojciech Macek  *		else
907902c8dcSWojciech Macek  *			printf("No signal found. probably the link partner is disconnected\n");
917902c8dcSWojciech Macek  *      }
927902c8dcSWojciech Macek  * @endcode
937902c8dcSWojciech Macek  *
947902c8dcSWojciech Macek  */
957902c8dcSWojciech Macek 
967902c8dcSWojciech Macek #ifndef __AL_INIT_ETH_LM_H__
977902c8dcSWojciech Macek #define __AL_INIT_ETH_LM_H__
987902c8dcSWojciech Macek 
997902c8dcSWojciech Macek #include <al_serdes.h>
1007902c8dcSWojciech Macek #include <al_hal_eth.h>
1017902c8dcSWojciech Macek #include "al_init_eth_kr.h"
1027902c8dcSWojciech Macek 
1037902c8dcSWojciech Macek enum al_eth_lm_link_mode {
1047902c8dcSWojciech Macek 	AL_ETH_LM_MODE_DISCONNECTED,
1057902c8dcSWojciech Macek 	AL_ETH_LM_MODE_10G_OPTIC,
1067902c8dcSWojciech Macek 	AL_ETH_LM_MODE_10G_DA,
1077902c8dcSWojciech Macek 	AL_ETH_LM_MODE_1G,
1087902c8dcSWojciech Macek 	AL_ETH_LM_MODE_25G,
1097902c8dcSWojciech Macek };
1107902c8dcSWojciech Macek 
1117902c8dcSWojciech Macek enum al_eth_lm_max_speed {
1127902c8dcSWojciech Macek 	AL_ETH_LM_MAX_SPEED_MAX,
1137902c8dcSWojciech Macek 	AL_ETH_LM_MAX_SPEED_25G,
1147902c8dcSWojciech Macek 	AL_ETH_LM_MAX_SPEED_10G,
1157902c8dcSWojciech Macek 	AL_ETH_LM_MAX_SPEED_1G,
1167902c8dcSWojciech Macek };
1177902c8dcSWojciech Macek 
1187902c8dcSWojciech Macek enum al_eth_lm_link_state {
1197902c8dcSWojciech Macek 	AL_ETH_LM_LINK_DOWN,
1207902c8dcSWojciech Macek 	AL_ETH_LM_LINK_DOWN_RF,
1217902c8dcSWojciech Macek 	AL_ETH_LM_LINK_UP,
1227902c8dcSWojciech Macek };
1237902c8dcSWojciech Macek 
1247902c8dcSWojciech Macek enum al_eth_lm_led_config_speed {
1257902c8dcSWojciech Macek 	AL_ETH_LM_LED_CONFIG_1G,
1267902c8dcSWojciech Macek 	AL_ETH_LM_LED_CONFIG_10G,
1277902c8dcSWojciech Macek 	AL_ETH_LM_LED_CONFIG_25G,
1287902c8dcSWojciech Macek };
1297902c8dcSWojciech Macek 
1307902c8dcSWojciech Macek struct al_eth_lm_led_config_data {
1317902c8dcSWojciech Macek 	enum al_eth_lm_led_config_speed	speed;
1327902c8dcSWojciech Macek };
1337902c8dcSWojciech Macek 
1347902c8dcSWojciech Macek struct al_eth_lm_context {
1357902c8dcSWojciech Macek 	struct al_hal_eth_adapter	*adapter;
1367902c8dcSWojciech Macek 	struct al_serdes_grp_obj	*serdes_obj;
1377902c8dcSWojciech Macek 	enum al_serdes_lane		lane;
1387902c8dcSWojciech Macek 
1397902c8dcSWojciech Macek 	uint32_t			link_training_failures;
1407902c8dcSWojciech Macek 
141*463edaf4SJohn Baldwin 	bool				tx_param_dirty;
142*463edaf4SJohn Baldwin 	bool				serdes_tx_params_valid;
1437902c8dcSWojciech Macek 	struct al_serdes_adv_tx_params	tx_params_override;
144*463edaf4SJohn Baldwin 	bool				rx_param_dirty;
145*463edaf4SJohn Baldwin 	bool				serdes_rx_params_valid;
1467902c8dcSWojciech Macek 	struct al_serdes_adv_rx_params	rx_params_override;
1477902c8dcSWojciech Macek 
1487902c8dcSWojciech Macek 	struct al_eth_an_adv		local_adv;
1497902c8dcSWojciech Macek 	struct al_eth_an_adv		partner_adv;
1507902c8dcSWojciech Macek 
1517902c8dcSWojciech Macek 	enum al_eth_lm_link_mode	mode;
1527902c8dcSWojciech Macek 	uint8_t				da_len;
153*463edaf4SJohn Baldwin 	bool				debug;
1547902c8dcSWojciech Macek 
1557902c8dcSWojciech Macek 	/* configurations */
156*463edaf4SJohn Baldwin 	bool				sfp_detection;
1577902c8dcSWojciech Macek 	uint8_t				sfp_bus_id;
1587902c8dcSWojciech Macek 	uint8_t				sfp_i2c_addr;
1597902c8dcSWojciech Macek 
1607902c8dcSWojciech Macek 	enum al_eth_lm_link_mode	default_mode;
1617902c8dcSWojciech Macek 	uint8_t				default_dac_len;
162*463edaf4SJohn Baldwin 	bool				link_training;
163*463edaf4SJohn Baldwin 	bool				rx_equal;
164*463edaf4SJohn Baldwin 	bool				static_values;
1657902c8dcSWojciech Macek 
166*463edaf4SJohn Baldwin 	bool				retimer_exist;
1677902c8dcSWojciech Macek 	enum al_eth_retimer_type	retimer_type;
1687902c8dcSWojciech Macek 	uint8_t				retimer_bus_id;
1697902c8dcSWojciech Macek 	uint8_t				retimer_i2c_addr;
1707902c8dcSWojciech Macek 	enum al_eth_retimer_channel	retimer_channel;
1717902c8dcSWojciech Macek 
1727902c8dcSWojciech Macek 	/* services */
1737902c8dcSWojciech Macek 	int (*i2c_read)(void *handle, uint8_t bus_id, uint8_t i2c_addr,
1747902c8dcSWojciech Macek 	    uint8_t reg_addr, uint8_t *val);
1757902c8dcSWojciech Macek 	int (*i2c_write)(void *handle, uint8_t bus_id, uint8_t i2c_addr,
1767902c8dcSWojciech Macek 	    uint8_t reg_addr, uint8_t val);
1777902c8dcSWojciech Macek 	void *i2c_context;
1787902c8dcSWojciech Macek 	uint8_t (*get_random_byte)(void);
1797902c8dcSWojciech Macek 
1807902c8dcSWojciech Macek 	int (*gpio_get)(unsigned int gpio);
1817902c8dcSWojciech Macek 	uint32_t			gpio_present;
1827902c8dcSWojciech Macek 
1837902c8dcSWojciech Macek 	enum al_eth_retimer_channel	retimer_tx_channel;
184*463edaf4SJohn Baldwin 	bool				retimer_configured;
1857902c8dcSWojciech Macek 
1867902c8dcSWojciech Macek 	enum al_eth_lm_max_speed	max_speed;
1877902c8dcSWojciech Macek 
188*463edaf4SJohn Baldwin 	bool				sfp_detect_force_mode;
1897902c8dcSWojciech Macek 
1907902c8dcSWojciech Macek 	enum al_eth_lm_link_state	link_state;
191*463edaf4SJohn Baldwin 	bool				new_port;
1927902c8dcSWojciech Macek 
193*463edaf4SJohn Baldwin 	bool (*lm_pause)(void *handle);
1947902c8dcSWojciech Macek 
1957902c8dcSWojciech Macek 	void (*led_config)(void *handle, struct al_eth_lm_led_config_data *data);
1967902c8dcSWojciech Macek };
1977902c8dcSWojciech Macek 
1987902c8dcSWojciech Macek struct al_eth_lm_init_params {
1997902c8dcSWojciech Macek 	/* pointer to HAL context */
2007902c8dcSWojciech Macek 	struct al_hal_eth_adapter	*adapter;
2017902c8dcSWojciech Macek 	/* pointer to serdes object */
2027902c8dcSWojciech Macek 	struct al_serdes_grp_obj	*serdes_obj;
2037902c8dcSWojciech Macek 	/* serdes lane for this port */
2047902c8dcSWojciech Macek 	enum al_serdes_lane		lane;
2057902c8dcSWojciech Macek 
2067902c8dcSWojciech Macek 	/*
2077902c8dcSWojciech Macek 	 * set to true to perform sfp detection if the link is down.
2087902c8dcSWojciech Macek 	 * when set to true, eeprom_read below should NOT be NULL.
2097902c8dcSWojciech Macek 	 */
210*463edaf4SJohn Baldwin 	bool				sfp_detection;
2117902c8dcSWojciech Macek 	/* i2c bus id of the SFP for this port */
2127902c8dcSWojciech Macek 	uint8_t				sfp_bus_id;
2137902c8dcSWojciech Macek 	/* i2c addr of the SFP for this port */
2147902c8dcSWojciech Macek 	uint8_t				sfp_i2c_addr;
2157902c8dcSWojciech Macek 	/*
2167902c8dcSWojciech Macek 	 * default mode, and dac length will be used in case sfp_detection
2177902c8dcSWojciech Macek 	 * is not set or in case the detection failed.
2187902c8dcSWojciech Macek 	 */
2197902c8dcSWojciech Macek 	enum al_eth_lm_link_mode	default_mode;
2207902c8dcSWojciech Macek 	uint8_t				default_dac_len;
2217902c8dcSWojciech Macek 
2227902c8dcSWojciech Macek 	/* the i2c bus id and addr of the retimer in case it exist */
2237902c8dcSWojciech Macek 	uint8_t				retimer_bus_id;
2247902c8dcSWojciech Macek 	uint8_t				retimer_i2c_addr;
2257902c8dcSWojciech Macek 	/* retimer channel connected to this port */
2267902c8dcSWojciech Macek 	enum al_eth_retimer_channel	retimer_channel;
2277902c8dcSWojciech Macek 	enum al_eth_retimer_channel	retimer_tx_channel;
2287902c8dcSWojciech Macek 	/* retimer type if exist */
2297902c8dcSWojciech Macek 	enum al_eth_retimer_type	retimer_type;
2307902c8dcSWojciech Macek 
2317902c8dcSWojciech Macek 	/*
2327902c8dcSWojciech Macek 	 * the following parameters control what mechanisms to run
2337902c8dcSWojciech Macek 	 * on link_establish with the following steps:
2347902c8dcSWojciech Macek 	 * - if retimer_exist is set, the retimer will be configured based on DA len.
2357902c8dcSWojciech Macek 	 * - if link_training is set and DA detected run link training. if succeed return 0
2367902c8dcSWojciech Macek 	 * - if rx_equal is set serdes equalization will be run to configure the rx parameters.
2377902c8dcSWojciech Macek 	 * - if static_values is set, tx and rx values will be set based on static values.
2387902c8dcSWojciech Macek 	 */
239*463edaf4SJohn Baldwin 	bool				retimer_exist;
240*463edaf4SJohn Baldwin 	bool				link_training;
241*463edaf4SJohn Baldwin 	bool				rx_equal;
242*463edaf4SJohn Baldwin 	bool				static_values;
2437902c8dcSWojciech Macek 
2447902c8dcSWojciech Macek 	/* enable / disable fec capabilities in AN */
245*463edaf4SJohn Baldwin 	bool				kr_fec_enable;
2467902c8dcSWojciech Macek 
2477902c8dcSWojciech Macek 	/*
2487902c8dcSWojciech Macek 	 * pointer to function that's read 1 byte from eeprom
2497902c8dcSWojciech Macek 	 * in case no eeprom is connected should return -ETIMEDOUT
2507902c8dcSWojciech Macek 	 */
2517902c8dcSWojciech Macek 	int (*i2c_read)(void *handle, uint8_t bus_id, uint8_t i2c_addr,
2527902c8dcSWojciech Macek 	    uint8_t reg_addr, uint8_t *val);
2537902c8dcSWojciech Macek 	int (*i2c_write)(void *handle, uint8_t bus_id, uint8_t i2c_addr,
2547902c8dcSWojciech Macek 	    uint8_t reg_addr, uint8_t val);
2557902c8dcSWojciech Macek 	void *i2c_context;
2567902c8dcSWojciech Macek 	/* pointer to function that return 1 rand byte */
2577902c8dcSWojciech Macek 	uint8_t (*get_random_byte)(void);
2587902c8dcSWojciech Macek 
2597902c8dcSWojciech Macek 	/* pointer to function that gets GPIO value - if NULL gpio present won't be used */
2607902c8dcSWojciech Macek 	int (*gpio_get)(unsigned int gpio);
2617902c8dcSWojciech Macek 	/* gpio number connected to the SFP present pin */
2627902c8dcSWojciech Macek 	uint32_t			gpio_present;
2637902c8dcSWojciech Macek 
2647902c8dcSWojciech Macek 	enum al_eth_lm_max_speed	max_speed;
2657902c8dcSWojciech Macek 
2667902c8dcSWojciech Macek 	/* in case force mode is true - the default mode will be set regardless to
2677902c8dcSWojciech Macek 	 * the SFP EEPROM content */
268*463edaf4SJohn Baldwin 	bool				sfp_detect_force_mode;
2697902c8dcSWojciech Macek 
2707902c8dcSWojciech Macek 	/* lm pause callback - in case it return true the LM will try to preserve
2717902c8dcSWojciech Macek 	 * the current link status and will not try to establish new link (and will not
2727902c8dcSWojciech Macek 	 * access to i2c bus) */
273*463edaf4SJohn Baldwin 	bool (*lm_pause)(void *handle);
2747902c8dcSWojciech Macek 
2757902c8dcSWojciech Macek 	/* config ethernet LEDs according to data. can be NULL if no configuration needed */
2767902c8dcSWojciech Macek 	void (*led_config)(void *handle, struct al_eth_lm_led_config_data *data);
2777902c8dcSWojciech Macek };
2787902c8dcSWojciech Macek 
2797902c8dcSWojciech Macek /**
2807902c8dcSWojciech Macek  * initialize link management context and set configuration
2817902c8dcSWojciech Macek  *
2827902c8dcSWojciech Macek  * @param  lm_context pointer to link management context
2837902c8dcSWojciech Macek  * @param  params  parameters passed from upper layer
2847902c8dcSWojciech Macek  *
2857902c8dcSWojciech Macek  * @return 0 in case of success. otherwise on failure.
2867902c8dcSWojciech Macek  */
2877902c8dcSWojciech Macek int al_eth_lm_init(struct al_eth_lm_context *lm_context,
2887902c8dcSWojciech Macek     struct al_eth_lm_init_params *params);
2897902c8dcSWojciech Macek 
2907902c8dcSWojciech Macek /**
2917902c8dcSWojciech Macek  * perform link status check. in case link is down perform sfp detection
2927902c8dcSWojciech Macek  *
2937902c8dcSWojciech Macek  * @param lm_context pointer to link management context
2947902c8dcSWojciech Macek  * @param link_fault indicate if the link is down
2957902c8dcSWojciech Macek  * @param old_mode the last working mode
2967902c8dcSWojciech Macek  * @param new_mode the new mode detected in this call
2977902c8dcSWojciech Macek  *
2987902c8dcSWojciech Macek  * @return  0 in case of success. otherwise on failure.
2997902c8dcSWojciech Macek  */
3007902c8dcSWojciech Macek int al_eth_lm_link_detection(struct al_eth_lm_context *lm_context,
301*463edaf4SJohn Baldwin     bool *link_fault, enum al_eth_lm_link_mode *old_mode,
3027902c8dcSWojciech Macek     enum al_eth_lm_link_mode *new_mode);
3037902c8dcSWojciech Macek 
3047902c8dcSWojciech Macek /**
3057902c8dcSWojciech Macek  * run LT, rx equalization and static values override according to configuration
3067902c8dcSWojciech Macek  * This function MUST be called inside a lock as it using common serdes registers
3077902c8dcSWojciech Macek  *
3087902c8dcSWojciech Macek  * @param lm_context pointer to link management context
3097902c8dcSWojciech Macek  * @param link_up set to true in case link is establish successfully
3107902c8dcSWojciech Macek  *
3117902c8dcSWojciech Macek  * @return < 0 in case link was failed to be established
3127902c8dcSWojciech Macek  */
3137902c8dcSWojciech Macek int al_eth_lm_link_establish(struct al_eth_lm_context *lm_context,
314*463edaf4SJohn Baldwin     bool *link_up);
3157902c8dcSWojciech Macek 
3167902c8dcSWojciech Macek /**
3177902c8dcSWojciech Macek  * override the default static parameters
3187902c8dcSWojciech Macek  *
3197902c8dcSWojciech Macek  * @param lm_context pointer to link management context
3207902c8dcSWojciech Macek  * @param tx_params pointer to new tx params
3217902c8dcSWojciech Macek  * @param rx_params pointer to new rx params
3227902c8dcSWojciech Macek  *
3237902c8dcSWojciech Macek  * @return  0 in case of success. otherwise on failure.
3247902c8dcSWojciech Macek  **/
3257902c8dcSWojciech Macek int al_eth_lm_static_parameters_override(struct al_eth_lm_context *lm_context,
3267902c8dcSWojciech Macek     struct al_serdes_adv_tx_params *tx_params,
3277902c8dcSWojciech Macek     struct al_serdes_adv_rx_params *rx_params);
3287902c8dcSWojciech Macek 
3297902c8dcSWojciech Macek /**
3307902c8dcSWojciech Macek  * disable serdes parameters override
3317902c8dcSWojciech Macek  *
3327902c8dcSWojciech Macek  * @param lm_context pointer to link management context
3337902c8dcSWojciech Macek  * @param tx_params set to true to disable override of tx params
3347902c8dcSWojciech Macek  * @param rx_params set to true to disable override of rx params
3357902c8dcSWojciech Macek  *
3367902c8dcSWojciech Macek  * @return  0 in case of success. otherwise on failure.
3377902c8dcSWojciech Macek  **/
3387902c8dcSWojciech Macek int al_eth_lm_static_parameters_override_disable(struct al_eth_lm_context *lm_context,
339*463edaf4SJohn Baldwin    bool tx_params, bool rx_params);
3407902c8dcSWojciech Macek 
3417902c8dcSWojciech Macek /**
3427902c8dcSWojciech Macek  * get the static parameters that are being used
3437902c8dcSWojciech Macek  * if the parameters was override - return the override values
3447902c8dcSWojciech Macek  * else return the current values of the parameters
3457902c8dcSWojciech Macek  *
3467902c8dcSWojciech Macek  * @param  lm_context pointer to link management context
3477902c8dcSWojciech Macek  * @param  tx_params  pointer to new tx params
3487902c8dcSWojciech Macek  * @param  rx_params  pointer to new rx params
3497902c8dcSWojciech Macek  *
3507902c8dcSWojciech Macek  * @return  0 in case of success. otherwise on failure.
3517902c8dcSWojciech Macek  */
3527902c8dcSWojciech Macek int al_eth_lm_static_parameters_get(struct al_eth_lm_context *lm_context,
3537902c8dcSWojciech Macek     struct al_serdes_adv_tx_params *tx_params,
3547902c8dcSWojciech Macek     struct al_serdes_adv_rx_params *rx_params);
3557902c8dcSWojciech Macek 
3567902c8dcSWojciech Macek /**
3577902c8dcSWojciech Macek  * convert link management mode to string
3587902c8dcSWojciech Macek  *
3597902c8dcSWojciech Macek  * @param  val link management mode
3607902c8dcSWojciech Macek  *
3617902c8dcSWojciech Macek  * @return     string of the mode
3627902c8dcSWojciech Macek  */
3637902c8dcSWojciech Macek const char *al_eth_lm_mode_convert_to_str(enum al_eth_lm_link_mode val);
3647902c8dcSWojciech Macek 
3657902c8dcSWojciech Macek /**
3667902c8dcSWojciech Macek  * print all debug messages
3677902c8dcSWojciech Macek  *
3687902c8dcSWojciech Macek  * @param lm_context pointer to link management context
3697902c8dcSWojciech Macek  * @param enable     set to true to enable debug mode
3707902c8dcSWojciech Macek  */
3717902c8dcSWojciech Macek void al_eth_lm_debug_mode_set(struct al_eth_lm_context *lm_context,
372*463edaf4SJohn Baldwin     bool enable);
3737902c8dcSWojciech Macek #endif
374