blob: 53926f17c1410ddeec7f2e187c71d8ebe39baabd [file] [log] [blame]
/*
* Copyright (c) 2015, 2017-2021, The Linux Foundation. All rights reserved.
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*qca808x_start*/
#ifndef _HSL_PHY_H_
#define _HSL_PHY_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "fal.h"
#include <linux/version.h>
#include <linux/phy.h>
/** Phy function reset type */
typedef enum {
PHY_FIFO_RESET = 0, /**< Phy fifo reset */
} hsl_phy_function_reset_t;
typedef sw_error_t(*hsl_phy_init) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_hibernation_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t enable);
typedef sw_error_t(*hsl_phy_hibernation_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_speed_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_speed_t * speed);
typedef sw_error_t(*hsl_phy_speed_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_speed_t speed);
typedef sw_error_t(*hsl_phy_duplex_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_duplex_t * duplex);
typedef sw_error_t(*hsl_phy_duplex_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_duplex_t duplex);
typedef sw_error_t(*hsl_phy_autoneg_enable_set) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_autoneg_enable_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_restart_autoneg) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef a_bool_t(*hsl_phy_autoneg_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_powersave_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t enable);
typedef sw_error_t(*hsl_phy_powersave_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_cdt) (a_uint32_t dev_id, a_uint32_t phy_id,
a_uint32_t mdi_pair,
fal_cable_status_t * cable_status,
a_uint32_t * cable_len);
typedef a_bool_t(*hsl_phy_link_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_get_ability) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * ability);
typedef sw_error_t(*hsl_phy_mdix_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_mdix_mode_t mode);
typedef sw_error_t(*hsl_phy_mdix_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_mdix_mode_t * mode);
typedef sw_error_t(*hsl_phy_mdix_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_mdix_status_t *
mode);
typedef sw_error_t(*hsl_phy_8023az_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t enable);
typedef sw_error_t(*hsl_phy_8023az_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_local_loopback_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t enable);
typedef sw_error_t(*hsl_phy_local_loopback_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_remote_loopback_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t enable);
typedef sw_error_t(*hsl_phy_remote_loopback_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_master_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_master_t master);
typedef sw_error_t(*hsl_phy_master_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_master_t * master);
/*qca808x_end*/
typedef sw_error_t(*hsl_phy_combo_prefer_medium_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_medium_t
phy_medium);
typedef sw_error_t(*hsl_phy_combo_prefer_medium_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_medium_t
* phy_medium);
typedef sw_error_t(*hsl_phy_combo_medium_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_medium_t
* phy_medium);
typedef sw_error_t(*hsl_phy_combo_fiber_mode_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_fiber_mode_t
fiber_mode);
typedef sw_error_t(*hsl_phy_combo_fiber_mode_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_fiber_mode_t
* fiber_mode);
typedef sw_error_t (*hsl_phy_function_reset) (a_uint32_t dev_id,
a_uint32_t phy_id,
hsl_phy_function_reset_t
phy_reset_type);
/*qca808x_start*/
typedef sw_error_t(*hsl_phy_reset) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_reset_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_reset_status_t *
status);
typedef sw_error_t(*hsl_phy_power_off) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_power_on) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_id_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t *phy_chip_id);
typedef sw_error_t(*hsl_phy_autoneg_adv_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t autoneg);
typedef sw_error_t(*hsl_phy_autoneg_adv_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * autoneg);
typedef sw_error_t(*hsl_phy_reg_write) (a_uint32_t dev_id,
a_uint32_t phy_addr,
a_uint32_t reg,
a_uint16_t reg_val);
typedef a_uint16_t(*hsl_phy_reg_read) (a_uint32_t dev_id,
a_uint32_t phy_addr,
a_uint32_t reg);
typedef sw_error_t(*hsl_phy_debug_write) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint16_t reg_id,
a_uint16_t reg_val);
typedef a_uint16_t(*hsl_phy_debug_read) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint16_t reg_id);
typedef sw_error_t(*hsl_phy_mmd_write) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint16_t mmd_num,
a_uint16_t reg_id,
a_uint16_t reg_val);
typedef a_uint16_t(*hsl_phy_mmd_read) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint16_t mmd_num,
a_uint16_t reg_id);
typedef sw_error_t(*hsl_phy_magic_frame_mac_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_mac_addr_t * mac);
typedef sw_error_t(*hsl_phy_magic_frame_mac_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_mac_addr_t * mac);
typedef sw_error_t(*hsl_phy_wol_status_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t enable);
typedef sw_error_t(*hsl_phy_wol_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_interface_mode_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_interface_mode_t
interface_mode);
typedef sw_error_t(*hsl_phy_interface_mode_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_interface_mode_t
* interface_mode);
typedef sw_error_t(*hsl_phy_interface_mode_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_interface_mode_t
* interface_mode);
typedef sw_error_t(*hsl_phy_intr_mask_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t mask);
typedef sw_error_t(*hsl_phy_intr_mask_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * mask);
typedef sw_error_t(*hsl_phy_intr_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * status);
typedef sw_error_t(*hsl_phy_counter_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t enable);
typedef sw_error_t(*hsl_phy_counter_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_bool_t * enable);
typedef sw_error_t(*hsl_phy_counter_show) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_port_counter_info_t * counter_info);
typedef sw_error_t(*hsl_phy_serdes_reset) (a_uint32_t dev_id);
typedef sw_error_t(*hsl_phy_get_status) (a_uint32_t dev_id,
a_uint32_t phy_id, struct port_phy_status *phy_status);
typedef sw_error_t(*hsl_phy_eee_adv_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t adv);
typedef sw_error_t(*hsl_phy_eee_adv_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * adv);
typedef sw_error_t(*hsl_phy_eee_partner_adv_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * adv);
typedef sw_error_t(*hsl_phy_eee_cap_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * cap);
typedef sw_error_t(*hsl_phy_eee_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t * status);
/*qca808x_end*/
typedef sw_error_t(*hsl_phy_led_ctrl_pattern_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
led_ctrl_pattern_t * pattern);
typedef sw_error_t(*hsl_phy_led_ctrl_pattern_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
led_ctrl_pattern_t * pattern);
typedef sw_error_t(*hsl_phy_led_ctrl_source_set) (a_uint32_t dev_id,
a_uint32_t phy_id,
a_uint32_t source_id,
led_ctrl_pattern_t * pattern);
typedef sw_error_t(*hsl_phy_ptp_security_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_security_t *sec);
typedef sw_error_t(*hsl_phy_ptp_link_delay_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_rx_crc_recalc_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id, a_bool_t *status);
typedef sw_error_t(*hsl_phy_ptp_tod_uart_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_tod_uart_t *tod_uart);
typedef sw_error_t(*hsl_phy_ptp_enhanced_timestamp_engine_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_direction_t direction,
fal_ptp_enhanced_ts_engine_t *ts_engine);
typedef sw_error_t(*hsl_phy_ptp_pps_signal_control_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_pps_signal_control_t *sig_control);
typedef sw_error_t(*hsl_phy_ptp_timestamp_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_direction_t direction,
fal_ptp_pkt_info_t *pkt_info, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_asym_correction_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_asym_correction_t* asym_cf);
typedef sw_error_t(*hsl_phy_ptp_rtc_time_snapshot_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id, a_bool_t *status);
typedef sw_error_t(*hsl_phy_ptp_capture_set) (a_uint32_t dev_id,
a_uint32_t phy_id, a_uint32_t capture_id,
fal_ptp_capture_t *capture);
typedef sw_error_t(*hsl_phy_ptp_rtc_adjfreq_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_asym_correction_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_asym_correction_t *asym_cf);
typedef sw_error_t(*hsl_phy_ptp_pkt_timestamp_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_rtc_time_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_rtc_time_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_pkt_timestamp_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_interrupt_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_interrupt_t *interrupt);
typedef sw_error_t(*hsl_phy_ptp_trigger_set) (a_uint32_t dev_id,
a_uint32_t phy_id, a_uint32_t trigger_id,
fal_ptp_trigger_t *triger);
typedef sw_error_t(*hsl_phy_ptp_pps_signal_control_get) (a_uint32_t dev_id,
a_uint32_t phy_id,
fal_ptp_pps_signal_control_t *sig_control);
typedef sw_error_t(*hsl_phy_ptp_capture_get) (a_uint32_t dev_id,
a_uint32_t phy_id, a_uint32_t capture_id,
fal_ptp_capture_t *capture);
typedef sw_error_t(*hsl_phy_ptp_rx_crc_recalc_enable) (a_uint32_t dev_id,
a_uint32_t phy_id, a_bool_t status);
typedef sw_error_t(*hsl_phy_ptp_security_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_security_t *sec);
typedef sw_error_t(*hsl_phy_ptp_increment_sync_from_clock_status_get) (a_uint32_t dev_id,
a_uint32_t phy_id, a_bool_t *status);
typedef sw_error_t(*hsl_phy_ptp_tod_uart_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_tod_uart_t *tod_uart);
typedef sw_error_t(*hsl_phy_ptp_enhanced_timestamp_engine_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_direction_t direction,
fal_ptp_enhanced_ts_engine_t *ts_engine);
typedef sw_error_t(*hsl_phy_ptp_rtc_time_clear) (a_uint32_t dev_id,
a_uint32_t phy_id);
typedef sw_error_t(*hsl_phy_ptp_reference_clock_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_reference_clock_t ref_clock);
typedef sw_error_t(*hsl_phy_ptp_output_waveform_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_output_waveform_t *waveform);
typedef sw_error_t(*hsl_phy_ptp_rx_timestamp_mode_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_rx_timestamp_mode_t ts_mode);
typedef sw_error_t(*hsl_phy_ptp_grandmaster_mode_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_grandmaster_mode_t *gm_mode);
typedef sw_error_t(*hsl_phy_ptp_config_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_config_t *config);
typedef sw_error_t(*hsl_phy_ptp_trigger_get) (a_uint32_t dev_id,
a_uint32_t phy_id, a_uint32_t trigger_id,
fal_ptp_trigger_t *triger);
typedef sw_error_t(*hsl_phy_ptp_rtc_adjfreq_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_grandmaster_mode_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_grandmaster_mode_t *gm_mode);
typedef sw_error_t(*hsl_phy_ptp_rx_timestamp_mode_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_rx_timestamp_mode_t *ts_mode);
typedef sw_error_t(*hsl_phy_ptp_rtc_adjtime_set) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_link_delay_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_time_t *time);
typedef sw_error_t(*hsl_phy_ptp_increment_sync_from_clock_enable) (a_uint32_t dev_id,
a_uint32_t phy_id, a_bool_t status);
typedef sw_error_t(*hsl_phy_ptp_config_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_config_t *config);
typedef sw_error_t(*hsl_phy_ptp_output_waveform_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_output_waveform_t *waveform);
typedef sw_error_t(*hsl_phy_ptp_interrupt_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_interrupt_t *interrupt);
typedef sw_error_t(*hsl_phy_ptp_rtc_time_snapshot_enable) (a_uint32_t dev_id,
a_uint32_t phy_id, a_bool_t status);
typedef sw_error_t(*hsl_phy_ptp_reference_clock_get) (a_uint32_t dev_id,
a_uint32_t phy_id, fal_ptp_reference_clock_t *ref_clock);
typedef struct hsl_phy_ptp_ops_s {
hsl_phy_ptp_security_set phy_ptp_security_set;
hsl_phy_ptp_link_delay_set phy_ptp_link_delay_set;
hsl_phy_ptp_rx_crc_recalc_status_get phy_ptp_rx_crc_recalc_status_get;
hsl_phy_ptp_tod_uart_set phy_ptp_tod_uart_set;
hsl_phy_ptp_enhanced_timestamp_engine_get phy_ptp_enhanced_timestamp_engine_get;
hsl_phy_ptp_pps_signal_control_set phy_ptp_pps_signal_control_set;
hsl_phy_ptp_timestamp_get phy_ptp_timestamp_get;
hsl_phy_ptp_asym_correction_get phy_ptp_asym_correction_get;
hsl_phy_ptp_rtc_time_snapshot_status_get phy_ptp_rtc_time_snapshot_status_get;
hsl_phy_ptp_capture_set phy_ptp_capture_set;
hsl_phy_ptp_rtc_adjfreq_set phy_ptp_rtc_adjfreq_set;
hsl_phy_ptp_asym_correction_set phy_ptp_asym_correction_set;
hsl_phy_ptp_pkt_timestamp_set phy_ptp_pkt_timestamp_set;
hsl_phy_ptp_rtc_time_get phy_ptp_rtc_time_get;
hsl_phy_ptp_rtc_time_set phy_ptp_rtc_time_set;
hsl_phy_ptp_pkt_timestamp_get phy_ptp_pkt_timestamp_get;
hsl_phy_ptp_interrupt_set phy_ptp_interrupt_set;
hsl_phy_ptp_trigger_set phy_ptp_trigger_set;
hsl_phy_ptp_pps_signal_control_get phy_ptp_pps_signal_control_get;
hsl_phy_ptp_capture_get phy_ptp_capture_get;
hsl_phy_ptp_rx_crc_recalc_enable phy_ptp_rx_crc_recalc_enable;
hsl_phy_ptp_security_get phy_ptp_security_get;
hsl_phy_ptp_increment_sync_from_clock_status_get \
phy_ptp_increment_sync_from_clock_status_get;
hsl_phy_ptp_tod_uart_get phy_ptp_tod_uart_get;
hsl_phy_ptp_enhanced_timestamp_engine_set phy_ptp_enhanced_timestamp_engine_set;
hsl_phy_ptp_rtc_time_clear phy_ptp_rtc_time_clear;
hsl_phy_ptp_reference_clock_set phy_ptp_reference_clock_set;
hsl_phy_ptp_output_waveform_set phy_ptp_output_waveform_set;
hsl_phy_ptp_rx_timestamp_mode_set phy_ptp_rx_timestamp_mode_set;
hsl_phy_ptp_grandmaster_mode_set phy_ptp_grandmaster_mode_set;
hsl_phy_ptp_config_set phy_ptp_config_set;
hsl_phy_ptp_trigger_get phy_ptp_trigger_get;
hsl_phy_ptp_rtc_adjfreq_get phy_ptp_rtc_adjfreq_get;
hsl_phy_ptp_grandmaster_mode_get phy_ptp_grandmaster_mode_get;
hsl_phy_ptp_rx_timestamp_mode_get phy_ptp_rx_timestamp_mode_get;
hsl_phy_ptp_rtc_adjtime_set phy_ptp_rtc_adjtime_set;
hsl_phy_ptp_link_delay_get phy_ptp_link_delay_get;
hsl_phy_ptp_increment_sync_from_clock_enable \
phy_ptp_increment_sync_from_clock_enable;
hsl_phy_ptp_config_get phy_ptp_config_get;
hsl_phy_ptp_output_waveform_get phy_ptp_output_waveform_get;
hsl_phy_ptp_interrupt_get phy_ptp_interrupt_get;
hsl_phy_ptp_rtc_time_snapshot_enable phy_ptp_rtc_time_snapshot_enable;
hsl_phy_ptp_reference_clock_get phy_ptp_reference_clock_get;
} hsl_phy_ptp_ops_t;
/*qca808x_start*/
typedef struct hsl_phy_ops_s {
hsl_phy_init phy_init;
hsl_phy_hibernation_set phy_hibernation_set;
hsl_phy_hibernation_get phy_hibernation_get;
hsl_phy_speed_get phy_speed_get;
hsl_phy_speed_set phy_speed_set;
hsl_phy_duplex_get phy_duplex_get;
hsl_phy_duplex_set phy_duplex_set;
hsl_phy_autoneg_enable_set phy_autoneg_enable_set;
hsl_phy_autoneg_enable_get phy_autoneg_enable_get;
hsl_phy_restart_autoneg phy_restart_autoneg;
hsl_phy_autoneg_status_get phy_autoneg_status_get;
hsl_phy_autoneg_adv_set phy_autoneg_adv_set;
hsl_phy_autoneg_adv_get phy_autoneg_adv_get;
hsl_phy_powersave_set phy_powersave_set;
hsl_phy_powersave_get phy_powersave_get;
hsl_phy_cdt phy_cdt;
hsl_phy_link_status_get phy_link_status_get;
hsl_phy_get_ability phy_get_ability;
hsl_phy_mdix_set phy_mdix_set;
hsl_phy_mdix_get phy_mdix_get;
hsl_phy_mdix_status_get phy_mdix_status_get;
hsl_phy_8023az_set phy_8023az_set;
hsl_phy_8023az_get phy_8023az_get;
hsl_phy_local_loopback_set phy_local_loopback_set;
hsl_phy_local_loopback_get phy_local_loopback_get;
hsl_phy_remote_loopback_set phy_remote_loopback_set;
hsl_phy_remote_loopback_get phy_remote_loopback_get;
hsl_phy_master_set phy_master_set;
hsl_phy_master_get phy_master_get;
/*qca808x_end*/
hsl_phy_combo_prefer_medium_set phy_combo_prefer_medium_set;
hsl_phy_combo_prefer_medium_get phy_combo_prefer_medium_get;
hsl_phy_combo_medium_status_get phy_combo_medium_status_get;
hsl_phy_combo_fiber_mode_set phy_combo_fiber_mode_set;
hsl_phy_combo_fiber_mode_get phy_combo_fiber_mode_get;
hsl_phy_function_reset phy_function_reset;
/*qca808x_start*/
hsl_phy_reset phy_reset;
hsl_phy_power_off phy_power_off;
hsl_phy_power_on phy_power_on;
hsl_phy_reset_status_get phy_reset_status_get;
hsl_phy_id_get phy_id_get;
hsl_phy_reg_write phy_reg_write;
hsl_phy_reg_read phy_reg_read;
hsl_phy_debug_write phy_debug_write;
hsl_phy_debug_read phy_debug_read;
hsl_phy_mmd_write phy_mmd_write;
hsl_phy_mmd_read phy_mmd_read;
hsl_phy_magic_frame_mac_set phy_magic_frame_mac_set;
hsl_phy_magic_frame_mac_get phy_magic_frame_mac_get;
hsl_phy_wol_status_set phy_wol_status_set;
hsl_phy_wol_status_get phy_wol_status_get;
hsl_phy_interface_mode_set phy_interface_mode_set;
hsl_phy_interface_mode_get phy_interface_mode_get;
hsl_phy_interface_mode_status_get phy_interface_mode_status_get;
hsl_phy_intr_mask_set phy_intr_mask_set;
hsl_phy_intr_mask_get phy_intr_mask_get;
hsl_phy_intr_status_get phy_intr_status_get;
hsl_phy_counter_set phy_counter_set;
hsl_phy_counter_get phy_counter_get;
hsl_phy_counter_show phy_counter_show;
hsl_phy_serdes_reset phy_serdes_reset;
hsl_phy_get_status phy_get_status;
hsl_phy_eee_adv_set phy_eee_adv_set;
hsl_phy_eee_adv_get phy_eee_adv_get;
hsl_phy_eee_partner_adv_get phy_eee_partner_adv_get;
hsl_phy_eee_cap_get phy_eee_cap_get;
hsl_phy_eee_status_get phy_eee_status_get;
/*qca808x_end*/
hsl_phy_led_ctrl_pattern_set phy_led_ctrl_pattern_set;
hsl_phy_led_ctrl_pattern_get phy_led_ctrl_pattern_get;
hsl_phy_led_ctrl_source_set phy_led_ctrl_source_set;
hsl_phy_ptp_ops_t phy_ptp_ops;
/*qca808x_start*/
} hsl_phy_ops_t;
typedef struct phy_driver_instance {
a_uint32_t phy_type;
a_uint32_t port_bmp[SW_MAX_NR_DEV];
hsl_phy_ops_t *phy_ops;
int (*init)(a_uint32_t dev_id, a_uint32_t portbmp);
void (*exit)(a_uint32_t dev_id, a_uint32_t portbmp);
} phy_driver_instance_t;
typedef enum
{
/*qca808x_end*/
F1_PHY_CHIP = 0,
F2_PHY_CHIP,
MALIBU_PHY_CHIP,
AQUANTIA_PHY_CHIP,
QCA803X_PHY_CHIP,
SFP_PHY_CHIP,
MPGE_PHY_CHIP,
/*qca808x_start*/
QCA808X_PHY_CHIP,
MAX_PHY_CHIP,
} phy_type_t;
#define PHY_INVALID_DAC 0
typedef struct {
a_uint8_t mdac;
a_uint8_t edac;
} phy_dac_t;
typedef struct {
a_uint32_t phy_address[SW_MAX_NR_PORT];
a_uint32_t phy_type[SW_MAX_NR_PORT];
/* fake mdio address is used to register the phy device,
* when the phy is not accessed by the MDIO bus.
* */
a_uint32_t phy_mdio_fake_address[SW_MAX_NR_PORT];
a_uint8_t phy_access_type[SW_MAX_NR_PORT];
a_bool_t phy_c45[SW_MAX_NR_PORT];
a_bool_t phy_combo[SW_MAX_NR_PORT];
a_uint32_t phy_reset_gpio[SW_MAX_NR_PORT];
phy_dac_t phy_dac[SW_MAX_NR_PORT];
} phy_info_t;
/*qca808x_end*/
#define MALIBU5PORT_PHY 0x004DD0B1
#define MALIBU2PORT_PHY 0x004DD0B2
#define QCA8030_PHY 0x004DD076
#define QCA8033_PHY 0x004DD074
#define QCA8035_PHY 0x004DD072
/*qca808x_start*/
#define QCA8081_PHY_V1_1 0x004DD101
#define INVALID_PHY_ID 0xFFFFFFFF
/*qca808x_end*/
#define F1V1_PHY 0x004DD033
#define F1V2_PHY 0x004DD034
#define F1V3_PHY 0x004DD035
#define F1V4_PHY 0x004DD036
#define F2V1_PHY 0x004DD042
#define AQUANTIA_PHY_107 0x03a1b4e2
#define AQUANTIA_PHY_108 0x03a1b4f2
#define AQUANTIA_PHY_109 0x03a1b502
#define AQUANTIA_PHY_111 0x03a1b610
#define AQUANTIA_PHY_111B0 0x03a1b612
#define AQUANTIA_PHY_112 0x03a1b660
#define AQUANTIA_PHY_113C_A0 0x31c31C10
#define AQUANTIA_PHY_113C_A1 0x31c31C11
#define AQUANTIA_PHY_112C 0x03a1b792
#define PHY_805XV2 0x004DD082
#define PHY_805XV1 0x004DD081
/*qca808x_start*/
#define SFP_PHY 0xaaaabbbb
/*qca808x_end*/
#define MP_GEPHY 0x004DD0C0
#define SFP_PHY_MASK 0xffffffff
#define CABLE_PAIR_A 0
#define CABLE_PAIR_B 1
#define CABLE_PAIR_C 2
#define CABLE_PAIR_D 3
/*qca808x_start*/
#define PHY_MDIO_ACCESS 0
#define PHY_I2C_ACCESS 1
#define INVALID_PHY_ADDR 0xff
#define MAX_PHY_ADDR 0x1f
#define QCA8072_PHY_NUM 0x2
#define PHY_INVALID_DATA 0xffff
#define PHY_RTN_ON_READ_ERROR(phy_data) \
do { if (phy_data == PHY_INVALID_DATA) return(SW_READ_ERROR); } while(0);
#define PHY_RTN_ON_ERROR(rv) \
do { if (rv != SW_OK) return(rv); } while(0);
sw_error_t
hsl_phy_api_ops_register(phy_type_t phy_type, hsl_phy_ops_t * phy_api_ops);
sw_error_t
hsl_phy_api_ops_unregister(phy_type_t phy_type, hsl_phy_ops_t * phy_api_ops);
hsl_phy_ops_t *hsl_phy_api_ops_get(a_uint32_t dev_id, a_uint32_t port_id);
sw_error_t phy_api_ops_init(phy_type_t phy_type);
int ssdk_phy_driver_init(a_uint32_t dev_id, ssdk_init_cfg *cfg);
int qca_ssdk_phy_info_init(a_uint32_t dev_id);
void qca_ssdk_port_bmp_init(a_uint32_t dev_id);
/*qca808x_end*/
void hsl_phy_address_init(a_uint32_t dev_id, a_uint32_t i,
a_uint32_t value);
/*qca808x_start*/
a_uint32_t
hsl_phyid_get(a_uint32_t dev_id, a_uint32_t port_id, ssdk_init_cfg *cfg);
a_uint32_t
qca_ssdk_port_to_phy_addr(a_uint32_t dev_id, a_uint32_t port_id);
/*qca808x_end*/
a_uint32_t
qca_ssdk_port_to_phy_mdio_fake_addr(a_uint32_t dev_id, a_uint32_t port_id);
a_uint32_t
qca_ssdk_phy_mdio_fake_addr_to_port(a_uint32_t dev_id, a_uint32_t phy_addr);
void qca_ssdk_phy_mdio_fake_address_set(a_uint32_t dev_id, a_uint32_t i,
a_uint32_t value);
/*qca808x_start*/
void qca_ssdk_port_bmp_set(a_uint32_t dev_id, a_uint32_t value);
a_uint32_t qca_ssdk_port_bmp_get(a_uint32_t dev_id);
/*qca808x_end*/
a_uint32_t qca_ssdk_phy_type_port_bmp_get(a_uint32_t dev_id,
phy_type_t phy_type);
/*qca808x_start*/
a_uint32_t
qca_ssdk_phy_addr_to_port(a_uint32_t dev_id, a_uint32_t phy_addr);
/*qca808x_end*/
void
hsl_port_phy_c45_capability_set(a_uint32_t dev_id, a_uint32_t port_id,
a_bool_t enable);
a_bool_t
hsl_port_phy_combo_capability_get(a_uint32_t dev_id, a_uint32_t port_id);
void
hsl_port_phy_combo_capability_set(a_uint32_t dev_id, a_uint32_t port_id,
a_bool_t enable);
/*qca808x_start*/
a_uint8_t
hsl_port_phy_access_type_get(a_uint32_t dev_id, a_uint32_t port_id);
void
hsl_port_phy_access_type_set(a_uint32_t dev_id, a_uint32_t port_id,
a_uint8_t access_type);
/*qca808x_end*/
sw_error_t
hsl_port_phy_serdes_reset(a_uint32_t dev_id);
sw_error_t
hsl_port_phy_mode_set(a_uint32_t dev_id, fal_port_interface_mode_t mode);
phy_type_t hsl_phy_type_get(a_uint32_t dev_id, a_uint32_t port_id);
a_uint32_t
hsl_port_phyid_get(a_uint32_t dev_id, fal_port_t port_id);
a_uint32_t hsl_port_phy_reset_gpio_get(a_uint32_t dev_id, a_uint32_t port_id);
void hsl_port_phy_reset_gpio_set(a_uint32_t dev_id, a_uint32_t port_id,
a_uint32_t phy_reset_gpio);
void hsl_port_phy_gpio_reset(a_uint32_t dev_id, a_uint32_t port_id);
void
hsl_port_phy_dac_get(a_uint32_t dev_id, a_uint32_t port_id,
phy_dac_t *phy_dac);
void
hsl_port_phy_dac_set(a_uint32_t dev_id, a_uint32_t port_id,
phy_dac_t phy_dac);
a_bool_t hsl_port_is_sfp(a_uint32_t dev_id, a_uint32_t port_id);
/*qca808x_start*/
sw_error_t ssdk_phy_driver_cleanup(void);
/*qca808x_end*/
sw_error_t
hsl_phydriver_update(a_uint32_t dev_id, a_uint32_t port_id,
a_uint32_t mode);
void
qca_ssdk_phy_address_set(a_uint32_t dev_id, a_uint32_t port_id,
a_uint32_t phy_addr);
sw_error_t
hsl_port_phy_hw_init(a_uint32_t dev_id, a_uint32_t port_id);
sw_error_t
hsl_port_phydev_get(a_uint32_t dev_id, a_uint32_t port_id,
struct phy_device **phydev);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0))
sw_error_t
hsl_port_phydev_adv_update(a_uint32_t dev_id, a_uint32_t port_id,
a_uint32_t autoadv);
#endif
/*qca808x_start*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _HSL_PHY_H_ */
/*qca808x_end*/