/*
 * Copyright (c) 2012, 2015, 2017-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. 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_API_H
#define _HSL_API_H

#ifdef __cplusplus
extern "C"
{
#endif				/* __cplusplus */

#include "fal.h"
/*qca808x_end*/

  /* Misc */
#define MISC_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_arp_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_arp_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_frame_max_size_set) (a_uint32_t dev_id, a_uint32_t size);

  typedef sw_error_t
    (*hsl_frame_max_size_get) (a_uint32_t dev_id, a_uint32_t * size);

  typedef sw_error_t
    (*hsl_port_unk_sa_cmd_set) (a_uint32_t dev_id, fal_port_t port_id,
				fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_port_unk_sa_cmd_get) (a_uint32_t dev_id, fal_port_t port_id,
				fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_port_unk_uc_filter_set) (a_uint32_t dev_id, fal_port_t port_id,
				   a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_unk_uc_filter_get) (a_uint32_t dev_id, fal_port_t port_id,
				   a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_unk_mc_filter_set) (a_uint32_t dev_id, fal_port_t port_id,
				   a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_unk_mc_filter_get) (a_uint32_t dev_id, fal_port_t port_id,
				   a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_bc_filter_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_bc_filter_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t * enable);

  typedef sw_error_t
    (*hsl_cpu_port_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_cpu_port_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_bc_to_cpu_port_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_bc_to_cpu_port_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_dhcp_set) (a_uint32_t dev_id, fal_port_t port_id,
			  a_bool_t enable);

  typedef sw_error_t
    (*hsl_pppoe_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_pppoe_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_pppoe_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_pppoe_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_dhcp_get) (a_uint32_t dev_id, fal_port_t port_id,
			  a_bool_t * enable);

  typedef sw_error_t
    (*hsl_arp_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_arp_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_eapol_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_eapol_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_pppoe_session_add) (a_uint32_t dev_id, a_uint32_t session_id,
			      a_bool_t strip_hdr);

  typedef sw_error_t
    (*hsl_pppoe_session_del) (a_uint32_t dev_id, a_uint32_t session_id);

  typedef sw_error_t
    (*hsl_pppoe_session_get) (a_uint32_t dev_id, a_uint32_t session_id,
			      a_bool_t * strip_hdr);

  typedef sw_error_t
    (*hsl_eapol_status_set) (a_uint32_t dev_id, a_uint32_t port_id,
			     a_bool_t enable);

  typedef sw_error_t
    (*hsl_eapol_status_get) (a_uint32_t dev_id, a_uint32_t port_id,
			     a_bool_t * enable);

  typedef sw_error_t
    (*hsl_ripv1_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_ripv1_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_arp_req_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_arp_req_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_arp_ack_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_arp_ack_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t * enable);

  typedef sw_error_t
    (*hsl_pppoe_session_table_add) (a_uint32_t dev_id,
				    fal_pppoe_session_t * session_tbl);

  typedef sw_error_t
    (*hsl_pppoe_session_table_del) (a_uint32_t dev_id,
				    fal_pppoe_session_t * session_tbl);

  typedef sw_error_t
    (*hsl_pppoe_session_table_get) (a_uint32_t dev_id,
				    fal_pppoe_session_t * session_tbl);

  typedef sw_error_t
    (*hsl_pppoe_session_id_set) (a_uint32_t dev_id, a_uint32_t index,
				 a_uint32_t id);

  typedef sw_error_t
    (*hsl_pppoe_session_id_get) (a_uint32_t dev_id, a_uint32_t index,
				 a_uint32_t * id);

  typedef sw_error_t
    (*hsl_intr_mask_set) (a_uint32_t dev_id, a_uint32_t intr_mask);

  typedef sw_error_t
    (*hsl_intr_mask_get) (a_uint32_t dev_id, a_uint32_t * intr_mask);

  typedef sw_error_t
    (*hsl_intr_status_get) (a_uint32_t dev_id, a_uint32_t * intr_status);

  typedef sw_error_t
    (*hsl_intr_status_clear) (a_uint32_t dev_id, a_uint32_t intr_status);

  typedef sw_error_t
    (*hsl_intr_port_link_mask_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_uint32_t intr_mask);

  typedef sw_error_t
    (*hsl_intr_port_link_mask_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_uint32_t * intr_mask);

  typedef sw_error_t
    (*hsl_intr_port_link_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				      a_uint32_t * intr_mask);

  typedef sw_error_t
    (*hsl_intr_mask_mac_linkchg_set) (a_uint32_t dev_id, fal_port_t port_id,
				      a_bool_t enable);

  typedef sw_error_t
    (*hsl_intr_mask_mac_linkchg_get) (a_uint32_t dev_id, fal_port_t port_id,
				      a_bool_t * enable);

  typedef sw_error_t
    (*hsl_intr_status_mac_linkchg_get) (a_uint32_t dev_id,
					fal_pbmp_t * port_bitmap);

  typedef sw_error_t (*hsl_intr_status_mac_linkchg_clear) (a_uint32_t dev_id);

  typedef sw_error_t
    (*hsl_cpu_vid_en_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_cpu_vid_en_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_rtd_pppoe_en_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_rtd_pppoe_en_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_global_macaddr_set) (a_uint32_t dev_id, fal_mac_addr_t * addr);

  typedef sw_error_t
    (*hsl_global_macaddr_get) (a_uint32_t dev_id, fal_mac_addr_t * addr);

  typedef sw_error_t
    (*hsl_lldp_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_lldp_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_frame_crc_reserve_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_frame_crc_reserve_get) (a_uint32_t dev_id, a_bool_t * enable);


  typedef sw_error_t
    (*hsl_register_dump) (a_uint32_t dev_id,a_uint32_t register_idx, fal_reg_dump_t * reg_dump);

  typedef sw_error_t
    (*hsl_debug_register_dump) (a_uint32_t dev_id, fal_debug_reg_dump_t * reg_dump);
 /*qca808x_start*/

  /* Port Control */
#define PORT_CONTROL_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_port_duplex_get) (a_uint32_t dev_id, fal_port_t port_id,
			    fal_port_duplex_t * pduplex);

  typedef sw_error_t
    (*hsl_port_duplex_set) (a_uint32_t dev_id, fal_port_t port_id,
			    fal_port_duplex_t duplex);

  typedef sw_error_t
    (*hsl_port_speed_get) (a_uint32_t dev_id, fal_port_t port_id,
			   fal_port_speed_t * pspeed);

  typedef sw_error_t
    (*hsl_port_autoneg_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t * status);

  typedef sw_error_t
    (*hsl_port_speed_set) (a_uint32_t dev_id, fal_port_t port_id,
			   fal_port_speed_t speed);

  typedef sw_error_t
    (*hsl_port_autoneg_enable) (a_uint32_t dev_id, fal_port_t port_id);

  typedef sw_error_t
    (*hsl_port_autoneg_restart) (a_uint32_t dev_id, fal_port_t port_id);

  typedef sw_error_t
    (*hsl_port_autoneg_adv_get) (a_uint32_t dev_id, fal_port_t port_id,
				 a_uint32_t * autoadv);

  typedef sw_error_t
    (*hsl_port_autoneg_adv_set) (a_uint32_t dev_id, fal_port_t port_id,
				 a_uint32_t autoadv);

  typedef sw_error_t
    (*hsl_port_hdr_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_hdr_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_flowctrl_set) (a_uint32_t dev_id, fal_port_t port_id,
			      a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_flowctrl_get) (a_uint32_t dev_id, fal_port_t port_id,
			      a_bool_t * enable);
  typedef sw_error_t
    (*hsl_port_flowctrl_thresh_set) (a_uint32_t dev_id, fal_port_t port_id,
			      a_uint16_t on, a_uint16_t off);

  typedef sw_error_t
    (*hsl_port_flowctrl_thresh_get) (a_uint32_t dev_id, fal_port_t port_id,
			      a_uint16_t *on, a_uint16_t *off);

  typedef sw_error_t
    (*hsl_port_flowctrl_forcemode_set) (a_uint32_t dev_id, fal_port_t port_id,
					a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_flowctrl_forcemode_get) (a_uint32_t dev_id, fal_port_t port_id,
					a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_powersave_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t enable);


  typedef sw_error_t
    (*hsl_port_powersave_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t * enable);


  typedef sw_error_t
    (*hsl_port_hibernate_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t enable);


  typedef sw_error_t
    (*hsl_port_hibernate_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t * enable);


  typedef sw_error_t
    (*hsl_port_cdt) (a_uint32_t dev_id, fal_port_t port_id,
		     a_uint32_t mdi_pair, fal_cable_status_t * cable_status,
		     a_uint32_t * cable_len);

  typedef sw_error_t
    (*hsl_port_rxhdr_mode_set) (a_uint32_t dev_id, fal_port_t port_id,
				fal_port_header_mode_t mode);

  typedef sw_error_t
    (*hsl_port_rxhdr_mode_get) (a_uint32_t dev_id, fal_port_t port_id,
				fal_port_header_mode_t * mode);

  typedef sw_error_t
    (*hsl_port_txhdr_mode_set) (a_uint32_t dev_id, fal_port_t port_id,
				fal_port_header_mode_t mode);

  typedef sw_error_t
    (*hsl_port_txhdr_mode_get) (a_uint32_t dev_id, fal_port_t port_id,
				fal_port_header_mode_t * mode);

  typedef sw_error_t
    (*hsl_header_type_set) (a_uint32_t dev_id, a_bool_t enable,
			    a_uint32_t type);

  typedef sw_error_t
    (*hsl_header_type_get) (a_uint32_t dev_id, a_bool_t * enable,
			    a_uint32_t * type);

  typedef sw_error_t
    (*hsl_port_txmac_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_txmac_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_rxmac_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_rxmac_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_txfc_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				 a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_txfc_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				 a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_rxfc_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				 a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_rxfc_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				 a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_bp_status_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_bp_status_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_link_forcemode_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_link_forcemode_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_link_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				 a_bool_t * status);

  typedef sw_error_t
    (*hsl_ports_link_status_get) (a_uint32_t dev_id, a_uint32_t * status);

  typedef sw_error_t
    (*hsl_port_mac_loopback_set) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_mac_loopback_get) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_congestion_drop_set) (a_uint32_t dev_id, fal_port_t port_id,
				     a_uint32_t queue_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_congestion_drop_get) (a_uint32_t dev_id, fal_port_t port_id,
				     a_uint32_t queue_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_ring_flow_ctrl_thres_set) (a_uint32_t dev_id, a_uint32_t ring_id,
				     a_uint16_t on_thres, a_uint16_t off_thres);

  typedef sw_error_t
    (*hsl_ring_flow_ctrl_thres_get) (a_uint32_t dev_id, a_uint32_t ring_id,
				     a_uint16_t * on_thres,
				     a_uint16_t * off_thres);
  typedef sw_error_t
	  (*hsl_ring_flow_ctrl_status_get) (a_uint32_t dev_id, a_uint32_t ring_id,
			  a_bool_t *status);
  typedef sw_error_t
	  (*hsl_ring_union_set) (a_uint32_t dev_id, a_bool_t en);

  typedef sw_error_t
	  (*hsl_ring_union_get) (a_uint32_t dev_id, a_bool_t *en);

  typedef sw_error_t
	  (*hsl_ring_flow_ctrl_get) (a_uint32_t dev_id, a_uint32_t ring_id,
			  a_bool_t *status);
  typedef sw_error_t
	  (*hsl_ring_flow_ctrl_set) (a_uint32_t dev_id, a_uint32_t ring_id,
			  a_bool_t status);

  typedef sw_error_t
    (*hsl_port_8023az_set) (a_uint32_t dev_id, fal_port_t port_id,
			    a_bool_t enable);


  typedef sw_error_t
    (*hsl_port_8023az_get) (a_uint32_t dev_id, fal_port_t port_id,
			    a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_mdix_set) (a_uint32_t dev_id, fal_port_t port_id,
			  fal_port_mdix_mode_t mode);

  typedef sw_error_t
    (*hsl_port_mdix_get) (a_uint32_t dev_id, fal_port_t port_id,
			  fal_port_mdix_mode_t * mode);

  typedef sw_error_t
    (*hsl_port_mdix_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				 fal_port_mdix_status_t * mode);

  typedef sw_error_t
    (*hsl_port_combo_prefer_medium_set) (a_uint32_t dev_id,
					 fal_port_t port_id,
					 fal_port_medium_t medium);

  typedef sw_error_t
    (*hsl_port_combo_prefer_medium_get) (a_uint32_t dev_id,
					 fal_port_t port_id,
					 fal_port_medium_t * medium);

  typedef sw_error_t
    (*hsl_port_combo_medium_status_get) (a_uint32_t dev_id,
					 fal_port_t port_id,
					 fal_port_medium_t * medium);

  typedef sw_error_t
    (*hsl_port_combo_fiber_mode_set) (a_uint32_t dev_id, fal_port_t port_id,
				      fal_port_fiber_mode_t mode);

  typedef sw_error_t
    (*hsl_port_combo_fiber_mode_get) (a_uint32_t dev_id, fal_port_t port_id,
				      fal_port_fiber_mode_t * mode);

  typedef sw_error_t
    (*hsl_port_local_loopback_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_local_loopback_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_remote_loopback_set) (a_uint32_t dev_id, fal_port_t port_id,
				     a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_remote_loopback_get) (a_uint32_t dev_id, fal_port_t port_id,
				     a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_reset) (a_uint32_t dev_id, fal_port_t port_id);

  typedef sw_error_t
    (*hsl_port_phy_id_get) (a_uint32_t dev_id, fal_port_t port_id,a_uint16_t * org_id, a_uint16_t * rev_id);

  typedef sw_error_t
    (*hsl_port_wol_status_set) (a_uint32_t dev_id, fal_port_t port_id,a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_wol_status_get) (a_uint32_t dev_id, fal_port_t port_id,a_bool_t *enable);

  typedef sw_error_t
    (*hsl_port_magic_frame_mac_set) (a_uint32_t dev_id, fal_port_t port_id,fal_mac_addr_t * mac);

  typedef sw_error_t
    (*hsl_port_magic_frame_mac_get) (a_uint32_t dev_id, fal_port_t port_id,fal_mac_addr_t * mac);

  typedef sw_error_t
    (*hsl_port_interface_mode_set) (a_uint32_t dev_id, fal_port_t port_id,
			      fal_port_interface_mode_t mode);

  typedef sw_error_t
    (*hsl_port_interface_mode_get) (a_uint32_t dev_id, fal_port_t port_id,
			      fal_port_interface_mode_t * mode);
    typedef sw_error_t
    (*hsl_port_interface_mode_apply) (a_uint32_t dev_id);

  typedef sw_error_t
    (*hsl_port_interface_mode_status_get) (a_uint32_t dev_id, fal_port_t port_id,
			      fal_port_interface_mode_t * mode);
   typedef sw_error_t
    (*hsl_port_counter_set) (a_uint32_t dev_id, fal_port_t port_id,
			    a_bool_t enable);
  typedef sw_error_t
    (*hsl_port_counter_get) (a_uint32_t dev_id, fal_port_t port_id,
			    a_bool_t * enable);
    typedef sw_error_t
    (*hsl_port_counter_show) (a_uint32_t dev_id, fal_port_t port_id,
			      fal_port_counter_info_t * counter_info);
 /*qca808x_end*/
  typedef sw_error_t
    (*hsl_port_interface_eee_cfg_set)(a_uint32_t dev_id,
			    fal_port_t port_id, fal_port_eee_cfg_t *port_eee_cfg);
  typedef sw_error_t
    (*hsl_port_interface_eee_cfg_get)(a_uint32_t dev_id,
			    fal_port_t port_id, fal_port_eee_cfg_t *port_eee_cfg);
  typedef sw_error_t
    (*hsl_port_erp_power_mode_set)(a_uint32_t dev_id,
			    fal_port_t port_id, fal_port_erp_power_mode_t power_mode);

  /* VLAN */
#define VLAN_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_vlan_entry_append) (a_uint32_t dev_id,
			      const fal_vlan_t * vlan_entry);

  typedef sw_error_t
    (*hsl_vlan_create) (a_uint32_t dev_id, a_uint32_t vlan_id);

  typedef sw_error_t
    (*hsl_vlan_next) (a_uint32_t dev_id, a_uint32_t vlan_id,
		      fal_vlan_t * p_vlan);

  typedef sw_error_t
    (*hsl_vlan_find) (a_uint32_t dev_id, a_uint32_t vlan_id,
		      fal_vlan_t * p_vlan);

  typedef sw_error_t
    (*hsl_vlan_member_update) (a_uint32_t dev_id, a_uint32_t vlan_id,
			       fal_pbmp_t member, fal_pbmp_t u_member);

  typedef sw_error_t
    (*hsl_vlan_delete) (a_uint32_t dev_id, a_uint32_t vlan_id);

  typedef sw_error_t (*hsl_vlan_flush) (a_uint32_t dev_id);

  typedef sw_error_t
    (*hsl_vlan_fid_set) (a_uint32_t dev_id, a_uint32_t vlan_id,
			 a_uint32_t fid);

  typedef sw_error_t
    (*hsl_vlan_fid_get) (a_uint32_t dev_id, a_uint32_t vlan_id,
			 a_uint32_t * fid);

  typedef sw_error_t
    (*hsl_vlan_member_add) (a_uint32_t dev_id, a_uint32_t vlan_id,
			    fal_port_t port_id, fal_pt_1q_egmode_t port_info);

  typedef sw_error_t
    (*hsl_vlan_member_del) (a_uint32_t dev_id, a_uint32_t vlan_id,
			    fal_port_t port_id);

  typedef sw_error_t
    (*hsl_vlan_learning_state_set) (a_uint32_t dev_id, a_uint32_t vlan_id,
				    a_bool_t enable);

  typedef sw_error_t
    (*hsl_vlan_learning_state_get) (a_uint32_t dev_id, a_uint32_t vlan_id,
				    a_bool_t * enable);

  /* Port Vlan */
#define PORT_VLAN_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_port_1qmode_get) (a_uint32_t dev_id, fal_port_t port_id,
			    fal_pt_1qmode_t * pport_1qmode);

  typedef sw_error_t
    (*hsl_port_1qmode_set) (a_uint32_t dev_id, fal_port_t port_id,
			    fal_pt_1qmode_t port_1qmode);

  typedef sw_error_t
    (*hsl_port_egvlanmode_get) (a_uint32_t dev_id, fal_port_t port_id,
				fal_pt_1q_egmode_t * pport_egvlanmode);

  typedef sw_error_t
    (*hsl_port_egvlanmode_set) (a_uint32_t dev_id, fal_port_t port_id,
				fal_pt_1q_egmode_t port_egvlanmode);

  typedef sw_error_t
    (*hsl_portvlan_member_add) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t mem_port_id);

  typedef sw_error_t
    (*hsl_portvlan_member_del) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t mem_port_id);

  typedef sw_error_t
    (*hsl_portvlan_member_update) (a_uint32_t dev_id, fal_port_t port_id,
				   fal_pbmp_t mem_port_map);

  typedef sw_error_t
    (*hsl_portvlan_member_get) (a_uint32_t dev_id, fal_port_t port_id,
				fal_pbmp_t * mem_port_map);

  typedef sw_error_t
    (*hsl_nestvlan_tpid_set) (a_uint32_t dev_id, a_uint32_t tpid);

  typedef sw_error_t
    (*hsl_nestvlan_tpid_get) (a_uint32_t dev_id, a_uint32_t * tpid);

  typedef sw_error_t
    (*hsl_port_force_default_vid_set) (a_uint32_t dev_id,
				       fal_port_t port_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_force_default_vid_get) (a_uint32_t dev_id,
				       fal_port_t port_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_force_portvlan_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_force_portvlan_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_invlan_mode_set) (a_uint32_t dev_id, fal_port_t port_id,
				 fal_pt_invlan_mode_t mode);

  typedef sw_error_t
    (*hsl_port_invlan_mode_get) (a_uint32_t dev_id, fal_port_t port_id,
				 fal_pt_invlan_mode_t * mode);

  typedef sw_error_t
    (*hsl_port_tls_set) (a_uint32_t dev_id, fal_port_t port_id,
			 a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_tls_get) (a_uint32_t dev_id, fal_port_t port_id,
			 a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_pri_propagation_set) (a_uint32_t dev_id, fal_port_t port_id,
				     a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_pri_propagation_get) (a_uint32_t dev_id, fal_port_t port_id,
				     a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_default_svid_set) (a_uint32_t dev_id, fal_port_t port_id,
				  a_uint32_t vid);

  typedef sw_error_t
    (*hsl_port_default_svid_get) (a_uint32_t dev_id, fal_port_t port_id,
				  a_uint32_t * vid);

  typedef sw_error_t
    (*hsl_port_default_cvid_set) (a_uint32_t dev_id, fal_port_t port_id,
				  a_uint32_t vid);

  typedef sw_error_t
    (*hsl_port_default_cvid_get) (a_uint32_t dev_id, fal_port_t port_id,
				  a_uint32_t * vid);

  typedef sw_error_t
    (*hsl_port_vlan_propagation_set) (a_uint32_t dev_id, fal_port_t port_id,
				      fal_vlan_propagation_mode_t mode);

  typedef sw_error_t
    (*hsl_port_vlan_propagation_get) (a_uint32_t dev_id, fal_port_t port_id,
				      fal_vlan_propagation_mode_t * mode);

  typedef sw_error_t
    (*hsl_port_vlan_trans_add) (a_uint32_t dev_id, fal_port_t port_id,
				fal_vlan_trans_entry_t * entry);

  typedef sw_error_t
    (*hsl_port_vlan_trans_del) (a_uint32_t dev_id, fal_port_t port_id,
				fal_vlan_trans_entry_t * entry);

  typedef sw_error_t
    (*hsl_port_vlan_trans_get) (a_uint32_t dev_id, fal_port_t port_id,
				fal_vlan_trans_entry_t * entry);

  typedef sw_error_t
    (*hsl_qinq_mode_set) (a_uint32_t dev_id, fal_qinq_mode_t mode);

  typedef sw_error_t
    (*hsl_qinq_mode_get) (a_uint32_t dev_id, fal_qinq_mode_t * mode);

  typedef sw_error_t
    (*hsl_port_qinq_role_set) (a_uint32_t dev_id, fal_port_t port_id,
			       fal_qinq_port_role_t role);

  typedef sw_error_t
    (*hsl_port_qinq_role_get) (a_uint32_t dev_id, fal_port_t port_id,
			       fal_qinq_port_role_t * role);

  typedef sw_error_t
    (*hsl_port_vlan_trans_iterate) (a_uint32_t dev_id, fal_port_t port_id,
				    a_uint32_t * iterator,
				    fal_vlan_trans_entry_t * entry);

  typedef sw_error_t
    (*hsl_port_mac_vlan_xlt_set) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_mac_vlan_xlt_get) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t * enable);

  typedef sw_error_t
    (*hsl_netisolate_set) (a_uint32_t dev_id, a_uint32_t enable);

  typedef sw_error_t
    (*hsl_netisolate_get) (a_uint32_t dev_id, a_uint32_t * enable);

  typedef sw_error_t
    (*hsl_eg_trans_filter_bypass_en_set) (a_uint32_t dev_id,
					  a_uint32_t enable);

  typedef sw_error_t
    (*hsl_eg_trans_filter_bypass_en_get) (a_uint32_t dev_id,
					  a_uint32_t * enable);

  typedef sw_error_t
    (*hsl_port_vrf_id_set) (a_uint32_t dev_id, fal_port_t port_id,
			    a_uint32_t vrf_id);

  typedef sw_error_t
    (*hsl_port_vrf_id_get) (a_uint32_t dev_id, fal_port_t port_id,
			    a_uint32_t * vrf_id);

  /* FDB */
#define FDB_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_fdb_add) (a_uint32_t dev_id, const fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_rfs_set) (a_uint32_t dev_id, const fal_fdb_rfs_t * entry);

  typedef sw_error_t
    (*hsl_fdb_rfs_del) (a_uint32_t dev_id, const fal_fdb_rfs_t * entry);

  typedef sw_error_t (*hsl_fdb_del_all) (a_uint32_t dev_id, a_uint32_t flag);

  typedef sw_error_t
    (*hsl_fdb_del_by_port) (a_uint32_t dev_id, a_uint32_t port_id,
			    a_uint32_t flag);

  typedef sw_error_t
    (*hsl_fdb_del_by_mac) (a_uint32_t dev_id, const fal_fdb_entry_t * addr);

  typedef sw_error_t
    (*hsl_fdb_first) (a_uint32_t dev_id, fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_next) (a_uint32_t dev_id, fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_find) (a_uint32_t dev_id, fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_port_learn_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t enable);

  typedef sw_error_t
    (*hsl_fdb_port_learn_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t * enable);

  typedef sw_error_t
    (*hsl_fdb_age_ctrl_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_fdb_age_ctrl_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_fdb_vlan_ivl_svl_set) (a_uint32_t dev_id, fal_fdb_smode smode);

  typedef sw_error_t
    (*hsl_fdb_vlan_ivl_svl_get) (a_uint32_t dev_id, fal_fdb_smode * smode);

  typedef sw_error_t
    (*hsl_fdb_age_time_set) (a_uint32_t dev_id, a_uint32_t * time);

  typedef sw_error_t
    (*hsl_fdb_age_time_get) (a_uint32_t dev_id, a_uint32_t * time);

  typedef sw_error_t
    (*hsl_fdb_iterate) (a_uint32_t dev_id, a_uint32_t * iterator,
			fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_extend_next) (a_uint32_t dev_id, fal_fdb_op_t * op,
			    fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_extend_first) (a_uint32_t dev_id, fal_fdb_op_t * option,
			     fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_transfer) (a_uint32_t dev_id, fal_port_t old_port,
			 fal_port_t new_port, a_uint32_t fid,
			 fal_fdb_op_t * option);

  typedef sw_error_t
    (*hsl_port_fdb_learn_limit_set) (a_uint32_t dev_id, fal_port_t port_id,
				     a_bool_t enable, a_uint32_t cnt);

  typedef sw_error_t
    (*hsl_port_fdb_learn_limit_get) (a_uint32_t dev_id, fal_port_t port_id,
				     a_bool_t * enable, a_uint32_t * cnt);

  typedef sw_error_t
    (*hsl_port_fdb_learn_exceed_cmd_set) (a_uint32_t dev_id,
					  fal_port_t port_id,
					  fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_port_fdb_learn_exceed_cmd_get) (a_uint32_t dev_id,
					  fal_port_t port_id,
					  fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_fdb_learn_limit_set) (a_uint32_t dev_id, a_bool_t enable,
				a_uint32_t cnt);

  typedef sw_error_t
    (*hsl_fdb_learn_limit_get) (a_uint32_t dev_id, a_bool_t * enable,
				a_uint32_t * cnt);

  typedef sw_error_t
    (*hsl_fdb_learn_exceed_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_fdb_learn_exceed_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_fdb_resv_add) (a_uint32_t dev_id, fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_resv_del) (a_uint32_t dev_id, fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_resv_find) (a_uint32_t dev_id, fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_resv_iterate) (a_uint32_t dev_id, a_uint32_t * iterator,
			     fal_fdb_entry_t * entry);

  typedef sw_error_t
    (*hsl_fdb_port_learn_static_set) (a_uint32_t dev_id, fal_port_t port_id,
				      a_bool_t enable);

  typedef sw_error_t
    (*hsl_fdb_port_learn_static_get) (a_uint32_t dev_id, fal_port_t port_id,
				      a_bool_t * enable);

  typedef sw_error_t
    (*hsl_fdb_port_add) (a_uint32_t dev_id, a_uint32_t fid,
			 fal_mac_addr_t * addr, fal_port_t port_id);

  typedef sw_error_t
    (*hsl_fdb_port_del) (a_uint32_t dev_id, a_uint32_t fid,
			 fal_mac_addr_t * addr, fal_port_t port_id);

  /* QOS */
#define QOS_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_cosmap_up_queue_set) (a_uint32_t dev_id, a_uint32_t up,
				fal_queue_t queue);

  typedef sw_error_t
    (*hsl_cosmap_up_queue_get) (a_uint32_t dev_id, a_uint32_t up,
				fal_queue_t * queue);

  typedef sw_error_t
    (*hsl_cosmap_dscp_queue_set) (a_uint32_t dev_id, a_uint32_t dscp,
				  fal_queue_t queue);

  typedef sw_error_t
    (*hsl_cosmap_dscp_queue_get) (a_uint32_t dev_id, a_uint32_t dscp,
				  fal_queue_t * queue);

  typedef sw_error_t
    (*hsl_qos_port_mode_set) (a_uint32_t dev_id, fal_port_t port_id,
			      fal_qos_mode_t mode, a_bool_t enable);

  typedef sw_error_t
    (*hsl_qos_port_mode_get) (a_uint32_t dev_id, fal_port_t port_id,
			      fal_qos_mode_t mode, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_qos_port_mode_pri_set) (a_uint32_t dev_id, fal_port_t port_id,
				  fal_qos_mode_t mode, a_uint32_t pri);

  typedef sw_error_t
    (*hsl_qos_port_mode_pri_get) (a_uint32_t dev_id, fal_port_t port_id,
				  fal_qos_mode_t mode, a_uint32_t * pri);

  typedef sw_error_t
    (*hsl_qos_port_default_up_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_uint32_t up);

  typedef sw_error_t
    (*hsl_qos_port_default_up_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_uint32_t * up);

  typedef sw_error_t
    (*hsl_qos_sch_mode_set) (a_uint32_t dev_id,
			     fal_sch_mode_t mode, const a_uint32_t weight[]);

  typedef sw_error_t
    (*hsl_qos_sch_mode_get) (a_uint32_t dev_id,
			     fal_sch_mode_t * mode, a_uint32_t weight[]);

  typedef sw_error_t
    (*hsl_qos_queue_tx_buf_status_set) (a_uint32_t dev_id, fal_port_t port_id,
					a_bool_t enable);

  typedef sw_error_t
    (*hsl_qos_queue_tx_buf_status_get) (a_uint32_t dev_id, fal_port_t port_id,
					a_bool_t * enable);

  typedef sw_error_t
    (*hsl_qos_queue_tx_buf_nr_set) (a_uint32_t dev_id, fal_port_t port_id,
				    a_uint32_t queue_id, a_uint32_t * number);

  typedef sw_error_t
    (*hsl_qos_queue_tx_buf_nr_get) (a_uint32_t dev_id, fal_port_t port_id,
				    a_uint32_t queue_id, a_uint32_t * number);

  typedef sw_error_t
    (*hsl_qos_port_tx_buf_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				       a_bool_t enable);

  typedef sw_error_t
    (*hsl_qos_port_tx_buf_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				       a_bool_t * enable);

  typedef sw_error_t
    (*hsl_qos_port_red_en_set) (a_uint32_t dev_id, fal_port_t port_id,
				a_bool_t enable);

  typedef sw_error_t
    (*hsl_qos_port_red_en_get) (a_uint32_t dev_id, fal_port_t port_id,
				a_bool_t * enable);

  typedef sw_error_t
    (*hsl_qos_port_tx_buf_nr_set) (a_uint32_t dev_id, fal_port_t port_id,
				   a_uint32_t * number);

  typedef sw_error_t
    (*hsl_qos_port_tx_buf_nr_get) (a_uint32_t dev_id, fal_port_t port_id,
				   a_uint32_t * number);

  typedef sw_error_t
    (*hsl_qos_port_rx_buf_nr_set) (a_uint32_t dev_id, fal_port_t port_id,
				   a_uint32_t * number, a_uint32_t * react_num);

  typedef sw_error_t
    (*hsl_qos_port_rx_buf_nr_get) (a_uint32_t dev_id, fal_port_t port_id,
				   a_uint32_t * number, a_uint32_t * react_num);

  typedef sw_error_t
    (*hsl_qos_port_sch_mode_set) (a_uint32_t dev_id, a_uint32_t port_id,
				  fal_sch_mode_t mode,
				  const a_uint32_t weight[]);

  typedef sw_error_t
    (*hsl_qos_port_sch_mode_get) (a_uint32_t dev_id, a_uint32_t port_id,
				  fal_sch_mode_t * mode, a_uint32_t weight[]);

  typedef sw_error_t
    (*hsl_qos_port_default_spri_set) (a_uint32_t dev_id, fal_port_t port_id,
				      a_uint32_t spri);

  typedef sw_error_t
    (*hsl_qos_port_default_spri_get) (a_uint32_t dev_id, fal_port_t port_id,
				      a_uint32_t * spri);

  typedef sw_error_t
    (*hsl_qos_port_default_cpri_set) (a_uint32_t dev_id, fal_port_t port_id,
				      a_uint32_t cpri);

  typedef sw_error_t
    (*hsl_qos_port_default_cpri_get) (a_uint32_t dev_id, fal_port_t port_id,
				      a_uint32_t * cpri);

  typedef sw_error_t
    (*hsl_qos_port_force_spri_status_set) (a_uint32_t dev_id,
					   fal_port_t port_id,
					   a_bool_t enable);

  typedef sw_error_t
    (*hsl_qos_port_force_spri_status_get) (a_uint32_t dev_id,
					   fal_port_t port_id,
					   a_bool_t * enable);

  typedef sw_error_t
    (*hsl_qos_port_force_cpri_status_set) (a_uint32_t dev_id,
					   fal_port_t port_id,
					   a_bool_t enable);

  typedef sw_error_t
    (*hsl_qos_port_force_cpri_status_get) (a_uint32_t dev_id,
					   fal_port_t port_id,
					   a_bool_t * enable);

  typedef sw_error_t
    (*hsl_qos_queue_remark_table_set) (a_uint32_t dev_id, fal_port_t port_id,
				       fal_queue_t queue_id,
				       a_uint32_t tbl_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_qos_queue_remark_table_get) (a_uint32_t dev_id, fal_port_t port_id,
				       fal_queue_t queue_id,
				       a_uint32_t * tbl_id,
				       a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_static_thresh_get)(a_uint32_t dev_id, fal_port_t port,
                                       fal_bm_static_cfg_t *cfg);

  typedef sw_error_t
    (*hsl_port_static_thresh_set)(a_uint32_t dev_id, fal_port_t port,
                                       fal_bm_static_cfg_t *cfg);

  /* Rate */
#define RATE_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_rate_queue_egrl_set) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t queue_id, a_uint32_t * speed,
				a_bool_t enable);

  typedef sw_error_t
    (*hsl_rate_queue_egrl_get) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t queue_id, a_uint32_t * speed,
				a_bool_t * enable);

  typedef sw_error_t
    (*hsl_rate_port_egrl_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_uint32_t * speed, a_bool_t enable);

  typedef sw_error_t
    (*hsl_rate_port_egrl_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_uint32_t * speed, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_rate_port_inrl_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_uint32_t * speed, a_bool_t enable);

  typedef sw_error_t
    (*hsl_rate_port_inrl_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_uint32_t * speed, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_storm_ctrl_frame_set) (a_uint32_t dev_id, fal_port_t port_id,
				 fal_storm_type_t storm_type,
				 a_bool_t enable);

  typedef sw_error_t
    (*hsl_storm_ctrl_frame_get) (a_uint32_t dev_id, fal_port_t port_id,
				 fal_storm_type_t storm_type,
				 a_bool_t * enable);

  typedef sw_error_t
    (*hsl_storm_ctrl_rate_set) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t * rate);

  typedef sw_error_t
    (*hsl_storm_ctrl_rate_get) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t * rate);

  typedef sw_error_t
    (*hsl_rate_port_policer_set) (a_uint32_t dev_id, fal_port_t port_id,
				  fal_port_policer_t * policer);

  typedef sw_error_t
    (*hsl_rate_port_policer_get) (a_uint32_t dev_id, fal_port_t port_id,
				  fal_port_policer_t * policer);

  typedef sw_error_t
    (*hsl_rate_port_shaper_set) (a_uint32_t dev_id, fal_port_t port_id,
				 a_bool_t enable,
				 fal_egress_shaper_t * shaper);

  typedef sw_error_t
    (*hsl_rate_port_shaper_get) (a_uint32_t dev_id, fal_port_t port_id,
				 a_bool_t * enable,
				 fal_egress_shaper_t * shaper);

  typedef sw_error_t
    (*hsl_rate_queue_shaper_set) (a_uint32_t dev_id, fal_port_t port_id,
				  fal_queue_t queue_id, a_bool_t enable,
				  fal_egress_shaper_t * shaper);

  typedef sw_error_t
    (*hsl_rate_queue_shaper_get) (a_uint32_t dev_id, fal_port_t port_id,
				  fal_queue_t queue_id, a_bool_t * enable,
				  fal_egress_shaper_t * shaper);

  typedef sw_error_t
    (*hsl_rate_acl_policer_set) (a_uint32_t dev_id, a_uint32_t policer_id,
				 fal_acl_policer_t * policer);

  typedef sw_error_t
    (*hsl_rate_acl_policer_get) (a_uint32_t dev_id, a_uint32_t policer_id,
				 fal_acl_policer_t * policer);

  typedef sw_error_t
    (*hsl_rate_port_add_rate_byte_set) (a_uint32_t dev_id, fal_port_t port_id,
					a_uint32_t number);

  typedef sw_error_t
    (*hsl_rate_port_add_rate_byte_get) (a_uint32_t dev_id, fal_port_t port_id,
					a_uint32_t * number);
  typedef sw_error_t
    (*hsl_rate_port_gol_flow_en_set) (a_uint32_t dev_id, fal_port_t port_id,
				      a_bool_t enable);

  typedef sw_error_t
    (*hsl_rate_port_gol_flow_en_get) (a_uint32_t dev_id, fal_port_t port_id,
				      a_bool_t * enable);

  /* Mirror */
#define MIRROR_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_mirr_analysis_port_set) (a_uint32_t dev_id, fal_port_t port_id);

  typedef sw_error_t
    (*hsl_mirr_analysis_port_get) (a_uint32_t dev_id, fal_port_t * port_id);

  typedef sw_error_t
    (*hsl_mirr_port_in_set) (a_uint32_t dev_id, fal_port_t port_id,
			     a_bool_t enable);

  typedef sw_error_t
    (*hsl_mirr_port_in_get) (a_uint32_t dev_id, fal_port_t port_id,
			     a_bool_t * enable);

  typedef sw_error_t
    (*hsl_mirr_port_eg_set) (a_uint32_t dev_id, fal_port_t port_id,
			     a_bool_t enable);

  typedef sw_error_t
    (*hsl_mirr_port_eg_get) (a_uint32_t dev_id, fal_port_t port_id,
			     a_bool_t * enable);

  /* STP */
#define STP_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_stp_port_state_set) (a_uint32_t dev_id, a_uint32_t st_id,
			       fal_port_t port_id, fal_stp_state_t state);

  typedef sw_error_t
    (*hsl_stp_port_state_get) (a_uint32_t dev_id, a_uint32_t st_id,
			       fal_port_t port_id, fal_stp_state_t * state);
  /* IGMP */
#define IGMP_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_port_igmps_status_set) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_igmps_status_get) (a_uint32_t dev_id, fal_port_t port_id,
				  a_bool_t * enable);

  typedef sw_error_t
    (*hsl_igmp_mld_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_igmp_mld_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_port_igmp_join_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_igmp_join_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_igmp_leave_set) (a_uint32_t dev_id, fal_port_t port_id,
				a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_igmp_leave_get) (a_uint32_t dev_id, fal_port_t port_id,
				a_bool_t * enable);

  typedef sw_error_t (*hsl_igmp_rp_set) (a_uint32_t dev_id, fal_pbmp_t pts);

  typedef sw_error_t (*hsl_igmp_rp_get) (a_uint32_t dev_id, fal_pbmp_t * pts);

  typedef sw_error_t
    (*hsl_igmp_entry_creat_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_igmp_entry_creat_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_igmp_entry_static_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_igmp_entry_static_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_igmp_entry_leaky_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_igmp_entry_leaky_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_igmp_entry_v3_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_igmp_entry_v3_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_igmp_entry_queue_set) (a_uint32_t dev_id, a_bool_t enable,
				 a_uint32_t queue);

  typedef sw_error_t
    (*hsl_igmp_entry_queue_get) (a_uint32_t dev_id, a_bool_t * enable,
				 a_uint32_t * queue);

  typedef sw_error_t
    (*hsl_port_igmp_mld_learn_limit_set) (a_uint32_t dev_id,
					  fal_port_t port_id, a_bool_t enable,
					  a_uint32_t cnt);

  typedef sw_error_t
    (*hsl_port_igmp_mld_learn_limit_get) (a_uint32_t dev_id,
					  fal_port_t port_id,
					  a_bool_t * enable,
					  a_uint32_t * cnt);

  typedef sw_error_t
    (*hsl_port_igmp_mld_learn_exceed_cmd_set) (a_uint32_t dev_id,
					       fal_port_t port_id,
					       fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_port_igmp_mld_learn_exceed_cmd_get) (a_uint32_t dev_id,
					       fal_port_t port_id,
					       fal_fwd_cmd_t * cmd);
  typedef sw_error_t (*hsl_igmp_sg_entry_set) (a_uint32_t dev_id,
					       fal_igmp_sg_entry_t * entry);

  typedef sw_error_t
    (*hsl_igmp_sg_entry_clear) (a_uint32_t dev_id,
				fal_igmp_sg_entry_t * entry);

  typedef sw_error_t (*hsl_igmp_sg_entry_show) (a_uint32_t dev_id);

  typedef sw_error_t
    (*hsl_igmp_sg_entry_query) (a_uint32_t dev_id, fal_igmp_sg_info_t * info);

  /* Leaky */
#define LEAKY_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_uc_leaky_mode_set) (a_uint32_t dev_id,
			      fal_leaky_ctrl_mode_t ctrl_mode);

  typedef sw_error_t
    (*hsl_uc_leaky_mode_get) (a_uint32_t dev_id,
			      fal_leaky_ctrl_mode_t * ctrl_mode);

  typedef sw_error_t
    (*hsl_mc_leaky_mode_set) (a_uint32_t dev_id,
			      fal_leaky_ctrl_mode_t ctrl_mode);

  typedef sw_error_t
    (*hsl_mc_leaky_mode_get) (a_uint32_t dev_id,
			      fal_leaky_ctrl_mode_t * ctrl_mode);

  typedef sw_error_t
    (*hsl_port_arp_leaky_set) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_arp_leaky_get) (a_uint32_t dev_id, fal_port_t port_id,
			       a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_uc_leaky_set) (a_uint32_t dev_id, fal_port_t port_id,
			      a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_uc_leaky_get) (a_uint32_t dev_id, fal_port_t port_id,
			      a_bool_t * enable);

  typedef sw_error_t
    (*hsl_port_mc_leaky_set) (a_uint32_t dev_id, fal_port_t port_id,
			      a_bool_t enable);

  typedef sw_error_t
    (*hsl_port_mc_leaky_get) (a_uint32_t dev_id, fal_port_t port_id,
			      a_bool_t * enable);

  /* Mib */
#define MIB_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_get_mib_info) (a_uint32_t dev_id, fal_port_t port_id,
			 fal_mib_info_t * mib_info);

  typedef sw_error_t
    (*hsl_get_rx_mib_info) (a_uint32_t dev_id, fal_port_t port_id,
			    fal_mib_info_t * mib_info);

  typedef sw_error_t
    (*hsl_get_tx_mib_info) (a_uint32_t dev_id, fal_port_t port_id,
			    fal_mib_info_t * mib_info);

  typedef sw_error_t
    (*hsl_mib_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_mib_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_mib_port_flush_counters) (a_uint32_t dev_id, fal_port_t port_id);

  typedef sw_error_t
    (*hsl_mib_cpukeep_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_mib_cpukeep_get) (a_uint32_t dev_id, a_bool_t * enable);

  /* Acl */
#define ACL_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_acl_list_creat) (a_uint32_t dev_id, a_uint32_t list_id,
			   a_uint32_t list_pri);

  typedef sw_error_t
    (*hsl_acl_list_destroy) (a_uint32_t dev_id, a_uint32_t list_id);

  typedef sw_error_t
    (*hsl_acl_rule_add) (a_uint32_t dev_id, a_uint32_t list_id,
			 a_uint32_t rule_id, a_uint32_t rule_nr,
			 fal_acl_rule_t * rule);

  typedef sw_error_t
    (*hsl_acl_rule_delete) (a_uint32_t dev_id, a_uint32_t list_id,
			    a_uint32_t rule_id, a_uint32_t rule_nr);

  typedef sw_error_t
    (*hsl_acl_rule_query) (a_uint32_t dev_id, a_uint32_t list_id,
			   a_uint32_t rule_id, fal_acl_rule_t * rule);

  typedef sw_error_t
    (*hsl_acl_list_bind) (a_uint32_t dev_id, a_uint32_t list_id,
			  fal_acl_direc_t direc, fal_acl_bind_obj_t obj_t,
			  a_uint32_t obj_idx);

  typedef sw_error_t
    (*hsl_acl_list_unbind) (a_uint32_t dev_id, a_uint32_t list_id,
			    fal_acl_direc_t direc, fal_acl_bind_obj_t obj_t,
			    a_uint32_t obj_idx);

  typedef sw_error_t
    (*hsl_acl_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_acl_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t (*hsl_acl_list_dump) (a_uint32_t dev_id);

  typedef sw_error_t (*hsl_acl_rule_dump) (a_uint32_t dev_id);

  typedef sw_error_t
    (*hsl_acl_port_udf_profile_set) (a_uint32_t dev_id, fal_port_t port_id,
				     fal_acl_udf_type_t udf_type,
				     a_uint32_t offset, a_uint32_t length);

  typedef sw_error_t
    (*hsl_acl_port_udf_profile_get) (a_uint32_t dev_id, fal_port_t port_id,
				     fal_acl_udf_type_t udf_type,
				     a_uint32_t * offset,
				     a_uint32_t * length);

  typedef sw_error_t
    (*hsl_acl_rule_active) (a_uint32_t dev_id, a_uint32_t list_id,
			    a_uint32_t rule_id, a_uint32_t rule_nr);

  typedef sw_error_t
    (*hsl_acl_rule_deactive) (a_uint32_t dev_id, a_uint32_t list_id,
			      a_uint32_t rule_id, a_uint32_t rule_nr);

  typedef sw_error_t
    (*hsl_acl_rule_src_filter_sts_set) (a_uint32_t dev_id,
					a_uint32_t rule_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_acl_rule_src_filter_sts_get) (a_uint32_t dev_id,
					a_uint32_t rule_id,
					a_bool_t * enable);

  typedef a_uint32_t
    (*hsl_acl_rule_get_offset) (a_uint32_t dev_id, a_uint32_t list_id,
				a_uint32_t rule_id);

  typedef sw_error_t
    (*hsl_acl_rule_sync_multi_portmap) (a_uint32_t dev_id, a_uint32_t pos,
					a_uint32_t * act);
/*qca808x_start*/

  typedef sw_error_t (*hsl_dev_reset) (a_uint32_t dev_id);

  typedef sw_error_t (*hsl_dev_clean) (a_uint32_t dev_id);

  typedef sw_error_t
    (*hsl_dev_access_set) (a_uint32_t dev_id, hsl_access_mode mode);
/*qca808x_end*/

  /* LED */
#define LED_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_led_ctrl_pattern_set) (a_uint32_t dev_id, led_pattern_group_t group,
				 led_pattern_id_t id,
				 led_ctrl_pattern_t * pattern);

  typedef sw_error_t
    (*hsl_led_ctrl_pattern_get) (a_uint32_t dev_id, led_pattern_group_t group,
				 led_pattern_id_t id,
				 led_ctrl_pattern_t * pattern);

  typedef sw_error_t
    (*hsl_led_ctrl_source_set) (a_uint32_t dev_id, a_uint32_t source_id,
				 led_ctrl_pattern_t * pattern);

  /* CoSMAP */
#define COSMAP_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_cosmap_dscp_to_pri_set) (a_uint32_t dev_id, a_uint32_t dscp,
				   a_uint32_t pri);

  typedef sw_error_t
    (*hsl_cosmap_dscp_to_pri_get) (a_uint32_t dev_id, a_uint32_t dscp,
				   a_uint32_t * pri);

  typedef sw_error_t
    (*hsl_cosmap_dscp_to_dp_set) (a_uint32_t dev_id, a_uint32_t dscp,
				  a_uint32_t dp);

  typedef sw_error_t
    (*hsl_cosmap_dscp_to_dp_get) (a_uint32_t dev_id, a_uint32_t dscp,
				  a_uint32_t * dp);

  typedef sw_error_t
    (*hsl_cosmap_up_to_pri_set) (a_uint32_t dev_id, a_uint32_t up,
				 a_uint32_t pri);

  typedef sw_error_t
    (*hsl_cosmap_up_to_pri_get) (a_uint32_t dev_id, a_uint32_t up,
				 a_uint32_t * pri);

  typedef sw_error_t
    (*hsl_cosmap_up_to_dp_set) (a_uint32_t dev_id, a_uint32_t up,
				a_uint32_t dp);

  typedef sw_error_t
    (*hsl_cosmap_up_to_dp_get) (a_uint32_t dev_id, a_uint32_t up,
				a_uint32_t * dp);

  typedef sw_error_t
    (*hsl_cosmap_dscp_to_ehpri_set) (a_uint32_t dev_id, a_uint32_t dscp,
				     a_uint32_t pri);

  typedef sw_error_t
    (*hsl_cosmap_dscp_to_ehpri_get) (a_uint32_t dev_id, a_uint32_t dscp,
				     a_uint32_t * pri);

  typedef sw_error_t
    (*hsl_cosmap_dscp_to_ehdp_set) (a_uint32_t dev_id, a_uint32_t dscp,
				    a_uint32_t dp);

  typedef sw_error_t
    (*hsl_cosmap_dscp_to_ehdp_get) (a_uint32_t dev_id, a_uint32_t dscp,
				    a_uint32_t * dp);

  typedef sw_error_t
    (*hsl_cosmap_up_to_ehpri_set) (a_uint32_t dev_id, a_uint32_t up,
				   a_uint32_t pri);

  typedef sw_error_t
    (*hsl_cosmap_up_to_ehpri_get) (a_uint32_t dev_id, a_uint32_t up,
				   a_uint32_t * pri);

  typedef sw_error_t
    (*hsl_cosmap_up_to_ehdp_set) (a_uint32_t dev_id, a_uint32_t up,
				  a_uint32_t dp);

  typedef sw_error_t
    (*hsl_cosmap_up_to_ehdp_get) (a_uint32_t dev_id, a_uint32_t up,
				  a_uint32_t * dp);

  typedef sw_error_t
    (*hsl_cosmap_pri_to_queue_set) (a_uint32_t dev_id, a_uint32_t pri,
				    a_uint32_t queue);

  typedef sw_error_t
    (*hsl_cosmap_pri_to_queue_get) (a_uint32_t dev_id, a_uint32_t pri,
				    a_uint32_t * queue);

  typedef sw_error_t
    (*hsl_cosmap_pri_to_ehqueue_set) (a_uint32_t dev_id, a_uint32_t pri,
				      a_uint32_t queue);

  typedef sw_error_t
    (*hsl_cosmap_pri_to_ehqueue_get) (a_uint32_t dev_id, a_uint32_t pri,
				      a_uint32_t * queue);

  typedef sw_error_t
    (*hsl_cosmap_egress_remark_set) (a_uint32_t dev_id, a_uint32_t tbl_id,
				     fal_egress_remark_table_t * tbl);

  typedef sw_error_t
    (*hsl_cosmap_egress_remark_get) (a_uint32_t dev_id, a_uint32_t tbl_id,
				     fal_egress_remark_table_t * tbl);


  /* IP */
#define IP_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_ip_host_add) (a_uint32_t dev_id, fal_host_entry_t * host_entry);

  typedef sw_error_t
    (*hsl_ip_host_del) (a_uint32_t dev_id, a_uint32_t del_mode,
			fal_host_entry_t * host_entry);

  typedef sw_error_t
    (*hsl_ip_host_get) (a_uint32_t dev_id, a_uint32_t get_mode,
			fal_host_entry_t * host_entry);

  typedef sw_error_t
    (*hsl_ip_host_next) (a_uint32_t dev_id, a_uint32_t next_mode,
			 fal_host_entry_t * host_entry);

  typedef sw_error_t
    (*hsl_ip_host_counter_bind) (a_uint32_t dev_id, a_uint32_t entry_id,
				 a_uint32_t cnt_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_ip_host_pppoe_bind) (a_uint32_t dev_id, a_uint32_t entry_id,
			       a_uint32_t pppoe_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_ip_pt_arp_learn_set) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t flags);

  typedef sw_error_t
    (*hsl_ip_pt_arp_learn_get) (a_uint32_t dev_id, fal_port_t port_id,
				a_uint32_t * flags);

  typedef sw_error_t
    (*hsl_ip_arp_learn_set) (a_uint32_t dev_id, fal_arp_learn_mode_t mode);

  typedef sw_error_t
    (*hsl_ip_arp_learn_get) (a_uint32_t dev_id, fal_arp_learn_mode_t * mode);

  typedef sw_error_t
    (*hsl_ip_source_guard_set) (a_uint32_t dev_id, fal_port_t port_id,
				fal_source_guard_mode_t mode);

  typedef sw_error_t
    (*hsl_ip_source_guard_get) (a_uint32_t dev_id, fal_port_t port_id,
				fal_source_guard_mode_t * mode);

  typedef sw_error_t
    (*hsl_ip_unk_source_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_ip_unk_source_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_ip_arp_guard_set) (a_uint32_t dev_id, fal_port_t port_id,
			     fal_source_guard_mode_t mode);

  typedef sw_error_t
    (*hsl_ip_arp_guard_get) (a_uint32_t dev_id, fal_port_t port_id,
			     fal_source_guard_mode_t * mode);

  typedef sw_error_t
    (*hsl_arp_unk_source_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_arp_unk_source_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_ip_route_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_ip_route_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_ip_intf_entry_add) (a_uint32_t dev_id,
			      fal_intf_mac_entry_t * entry);

  typedef sw_error_t
    (*hsl_ip_intf_entry_del) (a_uint32_t dev_id, a_uint32_t del_mode,
			      fal_intf_mac_entry_t * entry);

  typedef sw_error_t
    (*hsl_ip_intf_entry_next) (a_uint32_t dev_id, a_uint32_t next_mode,
			       fal_intf_mac_entry_t * entry);

  typedef sw_error_t
    (*hsl_ip_age_time_set) (a_uint32_t dev_id, a_uint32_t * time);

  typedef sw_error_t
    (*hsl_ip_age_time_get) (a_uint32_t dev_id, a_uint32_t * time);

  typedef sw_error_t
    (*hsl_ip_wcmp_hash_mode_set) (a_uint32_t dev_id, a_uint32_t hash_mode);

  typedef sw_error_t
    (*hsl_ip_wcmp_hash_mode_get) (a_uint32_t dev_id, a_uint32_t * hash_mode);

  typedef sw_error_t
    (*hsl_ip_vrf_base_addr_set) (a_uint32_t dev_id,
				 a_uint32_t vrf_id, fal_ip4_addr_t addr);

  typedef sw_error_t
    (*hsl_ip_vrf_base_addr_get) (a_uint32_t dev_id,
				 a_uint32_t vrf_id, fal_ip4_addr_t * addr);

  typedef sw_error_t
    (*hsl_ip_vrf_base_mask_set) (a_uint32_t dev_id,
				 a_uint32_t vrf_id, fal_ip4_addr_t addr);

  typedef sw_error_t
    (*hsl_ip_vrf_base_mask_get) (a_uint32_t dev_id,
				 a_uint32_t vrf_id, fal_ip4_addr_t * addr);

  typedef sw_error_t
    (*hsl_ip_default_route_set) (a_uint32_t dev_id,
				 a_uint32_t droute_id,
				 fal_default_route_t * entry);

  typedef sw_error_t
    (*hsl_ip_default_route_get) (a_uint32_t dev_id,
				 a_uint32_t droute_id,
				 fal_default_route_t * entry);

  typedef sw_error_t
    (*hsl_ip_host_route_set) (a_uint32_t dev_id,
			      a_uint32_t hroute_id, fal_host_route_t * entry);

  typedef sw_error_t
    (*hsl_ip_host_route_get) (a_uint32_t dev_id,
			      a_uint32_t hroute_id, fal_host_route_t * entry);

  typedef sw_error_t
    (*hsl_ip_wcmp_entry_set) (a_uint32_t dev_id,
			      a_uint32_t wcmp_id, fal_ip_wcmp_t * wcmp);

  typedef sw_error_t
    (*hsl_ip_wcmp_entry_get) (a_uint32_t dev_id,
			      a_uint32_t wcmp_id, fal_ip_wcmp_t * wcmp);
  typedef sw_error_t
    (*hsl_ip_rfs_ip4_set) (a_uint32_t dev_id, fal_ip4_rfs_t * rfs);

  typedef sw_error_t
    (*hsl_ip_rfs_ip6_set) (a_uint32_t dev_id, fal_ip6_rfs_t * rfs);
  typedef sw_error_t
    (*hsl_ip_rfs_ip4_del) (a_uint32_t dev_id, fal_ip4_rfs_t * rfs);

  typedef sw_error_t
    (*hsl_ip_rfs_ip6_del) (a_uint32_t dev_id, fal_ip6_rfs_t * rfs);

  typedef sw_error_t
    (*hsl_default_flow_cmd_set) (a_uint32_t dev_id,
				 a_uint32_t vrf_id, fal_flow_type_t type,
				 fal_default_flow_cmd_t cmd);

  typedef sw_error_t
    (*hsl_default_flow_cmd_get) (a_uint32_t dev_id,
				 a_uint32_t vrf_id, fal_flow_type_t type,
				 fal_default_flow_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_default_rt_flow_cmd_set) (a_uint32_t dev_id,
				    a_uint32_t vrf_id, fal_flow_type_t type,
				    fal_default_flow_cmd_t cmd);

  typedef sw_error_t
    (*hsl_default_rt_flow_cmd_get) (a_uint32_t dev_id,
				    a_uint32_t vrf_id, fal_flow_type_t type,
				    fal_default_flow_cmd_t * cmd);

typedef sw_error_t
	(*hsl_ip_glb_lock_time_set) (a_uint32_t dev_id, fal_glb_lock_time_t lock_time);

  /* NAT */
#define NAT_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_nat_add) (a_uint32_t dev_id, fal_nat_entry_t * nat_entry);

  typedef sw_error_t
    (*hsl_nat_del) (a_uint32_t dev_id, a_uint32_t del_mode,
		    fal_nat_entry_t * nat_entry);

  typedef sw_error_t
    (*hsl_nat_get) (a_uint32_t dev_id, a_uint32_t get_mode,
		    fal_nat_entry_t * nat_entry);

  typedef sw_error_t
    (*hsl_nat_next) (a_uint32_t dev_id, a_uint32_t next_mode,
		     fal_nat_entry_t * nat_entry);

  typedef sw_error_t
    (*hsl_nat_counter_bind) (a_uint32_t dev_id, a_uint32_t entry_id,
			     a_uint32_t cnt_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_napt_add) (a_uint32_t dev_id, fal_napt_entry_t * napt_entry);

  typedef sw_error_t
    (*hsl_napt_del) (a_uint32_t dev_id, a_uint32_t del_mode,
		     fal_napt_entry_t * napt_entry);

  typedef sw_error_t
    (*hsl_napt_get) (a_uint32_t dev_id, a_uint32_t get_mode,
		     fal_napt_entry_t * napt_entry);

  typedef sw_error_t
    (*hsl_napt_next) (a_uint32_t dev_id, a_uint32_t next_mode,
		      fal_napt_entry_t * napt_entry);

  typedef sw_error_t
    (*hsl_napt_counter_bind) (a_uint32_t dev_id, a_uint32_t entry_id,
			      a_uint32_t cnt_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_nat_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_nat_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_nat_hash_mode_set) (a_uint32_t dev_id, a_uint32_t mode);

  typedef sw_error_t
    (*hsl_nat_hash_mode_get) (a_uint32_t dev_id, a_uint32_t * mode);

  typedef sw_error_t
    (*hsl_napt_status_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_napt_status_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_napt_mode_set) (a_uint32_t dev_id, fal_napt_mode_t mode);

  typedef sw_error_t
    (*hsl_napt_mode_get) (a_uint32_t dev_id, fal_napt_mode_t * mode);

  typedef sw_error_t
    (*hsl_nat_prv_base_addr_set) (a_uint32_t dev_id, fal_ip4_addr_t addr);

  typedef sw_error_t
    (*hsl_nat_prv_base_addr_get) (a_uint32_t dev_id, fal_ip4_addr_t * addr);

  typedef sw_error_t
    (*hsl_nat_prv_base_mask_set) (a_uint32_t dev_id, fal_ip4_addr_t mask);

  typedef sw_error_t
    (*hsl_nat_prv_base_mask_get) (a_uint32_t dev_id, fal_ip4_addr_t * mask);

  typedef sw_error_t
    (*hsl_nat_prv_addr_mode_set) (a_uint32_t dev_id, a_bool_t map_en);

  typedef sw_error_t
    (*hsl_nat_prv_addr_mode_get) (a_uint32_t dev_id, a_bool_t * map_en);

  typedef sw_error_t
    (*hsl_nat_pub_addr_add) (a_uint32_t dev_id, fal_nat_pub_addr_t * entry);

  typedef sw_error_t
    (*hsl_nat_pub_addr_del) (a_uint32_t dev_id, a_uint32_t del_mode,
			     fal_nat_pub_addr_t * entry);

  typedef sw_error_t
    (*hsl_nat_pub_addr_next) (a_uint32_t dev_id, a_uint32_t next_mode,
			      fal_nat_pub_addr_t * entry);

  typedef sw_error_t
    (*hsl_nat_unk_session_cmd_set) (a_uint32_t dev_id, fal_fwd_cmd_t cmd);

  typedef sw_error_t
    (*hsl_nat_unk_session_cmd_get) (a_uint32_t dev_id, fal_fwd_cmd_t * cmd);

  typedef sw_error_t
    (*hsl_nat_global_set) (a_uint32_t dev_id, a_bool_t enable, a_uint32_t portbmp);

  typedef sw_error_t
    (*hsl_flow_cookie_set) (a_uint32_t dev_id,
			    fal_flow_cookie_t * flow_cookie);

  typedef sw_error_t
    (*hsl_flow_rfs_set) (a_uint32_t dev_id, a_uint8_t action,
			 fal_flow_rfs_t * rfs);

  /* SEC */
#define SEC_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_sec_norm_item_set) (a_uint32_t dev_id, fal_norm_item_t item,
			      void *value);

  typedef sw_error_t
    (*hsl_sec_norm_item_get) (a_uint32_t dev_id, fal_norm_item_t item,
			      void *value);


  /* Trunk */
#define TRUNK_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_trunk_group_set) (a_uint32_t dev_id, a_uint32_t trunk_id,
			    a_bool_t enable, fal_pbmp_t member);

  typedef sw_error_t
    (*hsl_trunk_group_get) (a_uint32_t dev_id, a_uint32_t trunk_id,
			    a_bool_t * enable, fal_pbmp_t * member);

  typedef sw_error_t
    (*hsl_trunk_hash_mode_set) (a_uint32_t dev_id, a_uint32_t hash_mode);

  typedef sw_error_t
    (*hsl_trunk_hash_mode_get) (a_uint32_t dev_id, a_uint32_t * hash_mode);

  typedef sw_error_t
    (*hsl_trunk_manipulate_sa_set) (a_uint32_t dev_id, fal_mac_addr_t * addr);

  typedef sw_error_t
    (*hsl_trunk_manipulate_sa_get) (a_uint32_t dev_id, fal_mac_addr_t * addr);

  /* Interface Control */
#define INTERFACE_CONTROL_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_interface_mac_mode_set) (a_uint32_t dev_id, fal_port_t port_id,
				   fal_mac_config_t * config);

  typedef sw_error_t
    (*hsl_interface_mac_mode_get) (a_uint32_t dev_id, fal_port_t port_id,
				   fal_mac_config_t * config);

  typedef sw_error_t
    (*hsl_interface_phy_mode_set) (a_uint32_t dev_id, a_uint32_t phy_id,
				   fal_phy_config_t * config);

  typedef sw_error_t
    (*hsl_interface_phy_mode_get) (a_uint32_t dev_id, a_uint32_t phy_id,
				   fal_phy_config_t * config);

  typedef sw_error_t
    (*hsl_interface_fx100_ctrl_set) (a_uint32_t dev_id,
				     fal_fx100_ctrl_config_t * config);

  typedef sw_error_t
    (*hsl_interface_fx100_ctrl_get) (a_uint32_t dev_id,
				     fal_fx100_ctrl_config_t * config);

  typedef sw_error_t
    (*hsl_interface_fx100_status_get) (a_uint32_t dev_id,
				       a_uint32_t * status);

  typedef sw_error_t
    (*hsl_interface_mac06_exch_set) (a_uint32_t dev_id, a_bool_t enable);

  typedef sw_error_t
    (*hsl_interface_mac06_exch_get) (a_uint32_t dev_id, a_bool_t * enable);

  typedef sw_error_t
    (*hsl_interface_pad_get) (a_uint32_t dev_id,a_uint32_t port_num, a_uint32_t *value);

  typedef sw_error_t
    (*hsl_interface_pad_set) (a_uint32_t dev_id,a_uint32_t port_num, a_uint32_t value);

  typedef sw_error_t
    (*hsl_interface_sgmii_get) (a_uint32_t dev_id, a_uint32_t * value);

  typedef sw_error_t
    (*hsl_interface_sgmii_set) (a_uint32_t dev_id, a_uint32_t value);


  /* REG */
/*qca808x_start*/
#define REG_FUNC_PROTOTYPE_DEF
  typedef sw_error_t
    (*hsl_phy_get) (a_uint32_t dev_id, a_uint32_t phy_addr, a_uint32_t reg,
		    a_uint16_t * value);

  typedef sw_error_t
    (*hsl_phy_set) (a_uint32_t dev_id, a_uint32_t phy_addr, a_uint32_t reg,
		    a_uint16_t value);
/*qca808x_end*/
  typedef sw_error_t
    (*hsl_reg_get) (a_uint32_t dev_id, a_uint32_t reg_addr,
		    a_uint8_t value[], a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_reg_set) (a_uint32_t dev_id, a_uint32_t reg_addr,
		    a_uint8_t value[], a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_psgmii_reg_get) (a_uint32_t dev_id, a_uint32_t reg_addr,
		    a_uint8_t *value, a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_psgmii_reg_set) (a_uint32_t dev_id, a_uint32_t reg_addr,
		    a_uint8_t *value, a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_reg_field_get) (a_uint32_t dev_id, a_uint32_t reg_addr,
			  a_uint32_t bit_offset, a_uint32_t field_len,
			  a_uint8_t value[], a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_reg_field_set) (a_uint32_t dev_id, a_uint32_t reg_addr,
			  a_uint32_t bit_offset, a_uint32_t field_len,
			  const a_uint8_t value[], a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_reg_entries_get) (a_uint32_t dev_id, a_uint32_t reg_addr,
			    a_uint32_t entry_len, a_uint8_t value[],
			    a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_reg_entries_set) (a_uint32_t dev_id, a_uint32_t reg_addr,
			    a_uint32_t entry_len, const a_uint8_t value[],
			    a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_debug_psgmii_self_test) (a_uint32_t dev_id, a_bool_t enable,
			    a_uint32_t times, a_uint32_t *result);
  typedef sw_error_t
    (*hsl_phy_dump)(a_uint32_t dev_id, a_uint32_t phy_addr,
			a_uint32_t idx,fal_phy_dump_t *phy_dump);

  typedef sw_error_t
    (*hsl_uniphy_reg_get) (a_uint32_t dev_id, a_uint32_t index,
		    a_uint32_t reg_addr, a_uint8_t value[], a_uint32_t value_len);

  typedef sw_error_t
    (*hsl_uniphy_reg_set) (a_uint32_t dev_id, a_uint32_t index,
    a_uint32_t reg_addr, a_uint8_t value[], a_uint32_t value_len);
/*qca808x_start*/

  typedef struct
  {
/*qca808x_end*/
#if (!(defined(USER_MODE) && defined(KERNEL_MODULE)))
#ifndef HSL_STANDALONG

    /* Misc */
    hsl_arp_status_set arp_status_set;
    hsl_arp_status_get arp_status_get;
    hsl_frame_max_size_set frame_max_size_set;
    hsl_frame_max_size_get frame_max_size_get;
    hsl_port_unk_sa_cmd_set port_unk_sa_cmd_set;
    hsl_port_unk_sa_cmd_get port_unk_sa_cmd_get;
    hsl_port_unk_uc_filter_set port_unk_uc_filter_set;
    hsl_port_unk_uc_filter_get port_unk_uc_filter_get;
    hsl_port_unk_mc_filter_set port_unk_mc_filter_set;
    hsl_port_unk_mc_filter_get port_unk_mc_filter_get;
    hsl_port_bc_filter_set port_bc_filter_set;
    hsl_port_bc_filter_get port_bc_filter_get;
    hsl_nestvlan_tpid_set nestvlan_tpid_set;
    hsl_nestvlan_tpid_get nestvlan_tpid_get;
    hsl_cpu_port_status_set cpu_port_status_set;
    hsl_cpu_port_status_get cpu_port_status_get;
    hsl_bc_to_cpu_port_set bc_to_cpu_port_set;
    hsl_bc_to_cpu_port_get bc_to_cpu_port_get;
    hsl_pppoe_cmd_set pppoe_cmd_set;
    hsl_pppoe_cmd_get pppoe_cmd_get;
    hsl_pppoe_status_set pppoe_status_set;
    hsl_pppoe_status_get pppoe_status_get;
    hsl_port_dhcp_set port_dhcp_set;
    hsl_port_dhcp_get port_dhcp_get;
    hsl_arp_cmd_set arp_cmd_set;
    hsl_arp_cmd_get arp_cmd_get;
    hsl_eapol_cmd_set eapol_cmd_set;
    hsl_eapol_cmd_get eapol_cmd_get;
    hsl_pppoe_session_add pppoe_session_add;
    hsl_pppoe_session_del pppoe_session_del;
    hsl_pppoe_session_get pppoe_session_get;
    hsl_eapol_status_set eapol_status_set;
    hsl_eapol_status_get eapol_status_get;
    hsl_ripv1_status_set ripv1_status_set;
    hsl_ripv1_status_get ripv1_status_get;
    hsl_port_arp_req_status_set port_arp_req_status_set;
    hsl_port_arp_req_status_get port_arp_req_status_get;
    hsl_port_arp_ack_status_set port_arp_ack_status_set;
    hsl_port_arp_ack_status_get port_arp_ack_status_get;
    hsl_pppoe_session_table_add pppoe_session_table_add;
    hsl_pppoe_session_table_del pppoe_session_table_del;
    hsl_pppoe_session_table_get pppoe_session_table_get;
    hsl_pppoe_session_id_set pppoe_session_id_set;
    hsl_pppoe_session_id_get pppoe_session_id_get;
    hsl_intr_mask_set intr_mask_set;
    hsl_intr_mask_get intr_mask_get;
    hsl_intr_status_get intr_status_get;
    hsl_intr_status_clear intr_status_clear;
    hsl_intr_port_link_mask_set intr_port_link_mask_set;
    hsl_intr_port_link_mask_get intr_port_link_mask_get;
    hsl_intr_port_link_status_get intr_port_link_status_get;
    hsl_intr_mask_mac_linkchg_set intr_mask_mac_linkchg_set;
    hsl_intr_mask_mac_linkchg_get intr_mask_mac_linkchg_get;
    hsl_intr_status_mac_linkchg_get intr_status_mac_linkchg_get;
    hsl_cpu_vid_en_set cpu_vid_en_set;
    hsl_cpu_vid_en_get cpu_vid_en_get;
    hsl_rtd_pppoe_en_set rtd_pppoe_en_set;
    hsl_rtd_pppoe_en_get rtd_pppoe_en_get;
    hsl_intr_status_mac_linkchg_clear intr_status_mac_linkchg_clear;
    hsl_global_macaddr_set global_macaddr_set;
    hsl_global_macaddr_get global_macaddr_get;
    hsl_lldp_status_set lldp_status_set;
    hsl_lldp_status_get lldp_status_get;
    hsl_frame_crc_reserve_set frame_crc_reserve_set;
    hsl_frame_crc_reserve_get frame_crc_reserve_get;

/*qca808x_start*/
    /* Port control */
    hsl_port_duplex_set port_duplex_set;
    hsl_port_duplex_get port_duplex_get;
    hsl_port_speed_set port_speed_set;
    hsl_port_speed_get port_speed_get;
    hsl_port_autoneg_status_get port_autoneg_status_get;
    hsl_port_autoneg_enable port_autoneg_enable;
    hsl_port_autoneg_restart port_autoneg_restart;
    hsl_port_autoneg_adv_get port_autoneg_adv_get;
    hsl_port_autoneg_adv_set port_autoneg_adv_set;
/*qca808x_end*/
    hsl_port_hdr_status_set port_hdr_status_set;
    hsl_port_hdr_status_get port_hdr_status_get;
/*qca808x_start*/
    hsl_port_flowctrl_set port_flowctrl_set;
    hsl_port_flowctrl_get port_flowctrl_get;
/*qca808x_end*/
    hsl_port_flowctrl_thresh_set port_flowctrl_thresh_set;
    hsl_port_flowctrl_thresh_get port_flowctrl_thresh_get;
    hsl_port_flowctrl_forcemode_set port_flowctrl_forcemode_set;
    hsl_port_flowctrl_forcemode_get port_flowctrl_forcemode_get;
/*qca808x_start*/
    hsl_port_powersave_set port_powersave_set;
    hsl_port_powersave_get port_powersave_get;
    hsl_port_hibernate_set port_hibernate_set;
    hsl_port_hibernate_get port_hibernate_get;
    hsl_port_cdt port_cdt;
/*qca808x_end*/
    hsl_port_rxhdr_mode_set port_rxhdr_mode_set;
    hsl_port_rxhdr_mode_get port_rxhdr_mode_get;
    hsl_port_txhdr_mode_set port_txhdr_mode_set;
    hsl_port_txhdr_mode_get port_txhdr_mode_get;
    hsl_header_type_set header_type_set;
    hsl_header_type_get header_type_get;
    hsl_port_txmac_status_set port_txmac_status_set;
    hsl_port_txmac_status_get port_txmac_status_get;
    hsl_port_rxmac_status_set port_rxmac_status_set;
    hsl_port_rxmac_status_get port_rxmac_status_get;
    hsl_port_txfc_status_set port_txfc_status_set;
    hsl_port_txfc_status_get port_txfc_status_get;
    hsl_port_rxfc_status_set port_rxfc_status_set;
    hsl_port_rxfc_status_get port_rxfc_status_get;
    hsl_port_bp_status_set port_bp_status_set;
    hsl_port_bp_status_get port_bp_status_get;
    hsl_port_link_forcemode_set port_link_forcemode_set;
    hsl_port_link_forcemode_get port_link_forcemode_get;
/*qca808x_start*/
    hsl_port_link_status_get port_link_status_get;
    hsl_ports_link_status_get ports_link_status_get;
/*qca808x_end*/
    hsl_port_mac_loopback_set port_mac_loopback_set;
    hsl_port_mac_loopback_get port_mac_loopback_get;
    hsl_port_congestion_drop_set port_congestion_drop_set;
    hsl_port_congestion_drop_get port_congestion_drop_get;
    hsl_ring_flow_ctrl_thres_set ring_flow_ctrl_thres_set;
    hsl_ring_flow_ctrl_thres_get ring_flow_ctrl_thres_get;
    hsl_ring_flow_ctrl_status_get ring_flow_ctrl_status_get;
    hsl_ring_union_set ring_union_set;
    hsl_ring_union_get ring_union_get;
    hsl_ring_flow_ctrl_set ring_flow_ctrl_set;
    hsl_ring_flow_ctrl_get ring_flow_ctrl_get;
/*qca808x_start*/
    hsl_port_8023az_set port_8023az_set;
    hsl_port_8023az_get port_8023az_get;
    hsl_port_mdix_set port_mdix_set;
    hsl_port_mdix_get port_mdix_get;
    hsl_port_mdix_status_get port_mdix_status_get;
/*qca808x_end*/
    hsl_port_combo_prefer_medium_set port_combo_prefer_medium_set;
    hsl_port_combo_prefer_medium_get port_combo_prefer_medium_get;
    hsl_port_combo_medium_status_get port_combo_medium_status_get;
    hsl_port_combo_fiber_mode_set port_combo_fiber_mode_set;
    hsl_port_combo_fiber_mode_get port_combo_fiber_mode_get;
/*qca808x_start*/
    hsl_port_local_loopback_set port_local_loopback_set;
    hsl_port_local_loopback_get port_local_loopback_get;
    hsl_port_remote_loopback_set port_remote_loopback_set;
    hsl_port_remote_loopback_get port_remote_loopback_get;
    hsl_port_reset port_reset;
    hsl_port_phy_id_get port_phy_id_get;
    hsl_port_wol_status_set port_wol_status_set;
    hsl_port_wol_status_get port_wol_status_get;
    hsl_port_magic_frame_mac_set port_magic_frame_mac_set;
    hsl_port_magic_frame_mac_get port_magic_frame_mac_get;
/*qca808x_end*/
    hsl_port_interface_mode_set port_interface_mode_set;
    hsl_port_interface_mode_get port_interface_mode_get;
    hsl_port_interface_mode_apply port_interface_mode_apply;
/*qca808x_start*/
    hsl_port_interface_mode_status_get port_interface_mode_status_get;
    hsl_port_counter_set port_counter_set;
    hsl_port_counter_get port_counter_get;
    hsl_port_counter_show port_counter_show;
/*qca808x_end*/
    hsl_port_interface_eee_cfg_set port_interface_eee_cfg_set;
    hsl_port_interface_eee_cfg_get port_interface_eee_cfg_get;
    hsl_port_erp_power_mode_set port_erp_power_mode_set;
    /* VLAN */
    hsl_vlan_entry_append vlan_entry_append;
    hsl_vlan_create vlan_creat;
    hsl_vlan_member_update vlan_member_update;
    hsl_vlan_delete vlan_delete;
    hsl_vlan_find vlan_find;
    hsl_vlan_next vlan_next;
    hsl_vlan_flush vlan_flush;
    hsl_vlan_fid_set vlan_fid_set;
    hsl_vlan_fid_get vlan_fid_get;
    hsl_vlan_member_add vlan_member_add;
    hsl_vlan_member_del vlan_member_del;
    hsl_vlan_learning_state_set vlan_learning_state_set;
    hsl_vlan_learning_state_get vlan_learning_state_get;

    /* Port VLAN */
    hsl_port_1qmode_set port_1qmode_set;
    hsl_port_1qmode_get port_1qmode_get;
    hsl_port_egvlanmode_get port_egvlanmode_get;
    hsl_port_egvlanmode_set port_egvlanmode_set;
    hsl_portvlan_member_add portvlan_member_add;
    hsl_portvlan_member_del portvlan_member_del;
    hsl_portvlan_member_update portvlan_member_update;
    hsl_portvlan_member_get portvlan_member_get;
    hsl_port_force_default_vid_set port_force_default_vid_set;
    hsl_port_force_default_vid_get port_force_default_vid_get;
    hsl_port_force_portvlan_set port_force_portvlan_set;
    hsl_port_force_portvlan_get port_force_portvlan_get;
    hsl_port_invlan_mode_set port_invlan_mode_set;
    hsl_port_invlan_mode_get port_invlan_mode_get;
    hsl_port_tls_set port_tls_set;
    hsl_port_tls_get port_tls_get;
    hsl_port_pri_propagation_set port_pri_propagation_set;
    hsl_port_pri_propagation_get port_pri_propagation_get;
    hsl_port_default_svid_set port_default_svid_set;
    hsl_port_default_svid_get port_default_svid_get;
    hsl_port_default_cvid_set port_default_cvid_set;
    hsl_port_default_cvid_get port_default_cvid_get;
    hsl_port_vlan_propagation_set port_vlan_propagation_set;
    hsl_port_vlan_propagation_get port_vlan_propagation_get;
    hsl_port_vlan_trans_add port_vlan_trans_add;
    hsl_port_vlan_trans_del port_vlan_trans_del;
    hsl_port_vlan_trans_get port_vlan_trans_get;
    hsl_qinq_mode_set qinq_mode_set;
    hsl_qinq_mode_get qinq_mode_get;
    hsl_port_qinq_role_set port_qinq_role_set;
    hsl_port_qinq_role_get port_qinq_role_get;
    hsl_port_vlan_trans_iterate port_vlan_trans_iterate;
    hsl_port_mac_vlan_xlt_set port_mac_vlan_xlt_set;
    hsl_port_mac_vlan_xlt_get port_mac_vlan_xlt_get;
    hsl_netisolate_set netisolate_set;
    hsl_netisolate_get netisolate_get;
    hsl_eg_trans_filter_bypass_en_set eg_trans_filter_bypass_en_set;
    hsl_eg_trans_filter_bypass_en_get eg_trans_filter_bypass_en_get;
    hsl_port_vrf_id_set port_vrf_id_set;
    hsl_port_vrf_id_get port_vrf_id_get;

    /* FDB */
    hsl_fdb_add fdb_add;
    hsl_fdb_del_all fdb_del_all;
    hsl_fdb_del_by_port fdb_del_by_port;
    hsl_fdb_del_by_mac fdb_del_by_mac;
    hsl_fdb_first fdb_first;
    hsl_fdb_next fdb_next;
    hsl_fdb_find fdb_find;
    hsl_fdb_port_learn_set port_learn_set;
    hsl_fdb_port_learn_get port_learn_get;
    hsl_fdb_age_ctrl_set age_ctrl_set;
    hsl_fdb_age_ctrl_get age_ctrl_get;
    hsl_fdb_vlan_ivl_svl_set vlan_ivl_svl_set;
    hsl_fdb_vlan_ivl_svl_get vlan_ivl_svl_get;
    hsl_fdb_age_time_set age_time_set;
    hsl_fdb_age_time_get age_time_get;
    hsl_fdb_iterate fdb_iterate;
    hsl_fdb_extend_next fdb_extend_next;
    hsl_fdb_extend_first fdb_extend_first;
    hsl_fdb_transfer fdb_transfer;
    hsl_port_fdb_learn_limit_set port_fdb_learn_limit_set;
    hsl_port_fdb_learn_limit_get port_fdb_learn_limit_get;
    hsl_port_fdb_learn_exceed_cmd_set port_fdb_learn_exceed_cmd_set;
    hsl_port_fdb_learn_exceed_cmd_get port_fdb_learn_exceed_cmd_get;
    hsl_fdb_learn_limit_set fdb_learn_limit_set;
    hsl_fdb_learn_limit_get fdb_learn_limit_get;
    hsl_fdb_learn_exceed_cmd_set fdb_learn_exceed_cmd_set;
    hsl_fdb_learn_exceed_cmd_get fdb_learn_exceed_cmd_get;
    hsl_fdb_resv_add fdb_resv_add;
    hsl_fdb_resv_del fdb_resv_del;
    hsl_fdb_resv_find fdb_resv_find;
    hsl_fdb_resv_iterate fdb_resv_iterate;
    hsl_fdb_port_learn_static_set fdb_port_learn_static_set;
    hsl_fdb_port_learn_static_get fdb_port_learn_static_get;
    hsl_fdb_port_add fdb_port_add;
    hsl_fdb_port_del fdb_port_del;
    hsl_fdb_rfs_set fdb_rfs_set;
    hsl_fdb_rfs_del fdb_rfs_del;

    /* QOS */
    hsl_qos_sch_mode_set qos_sch_mode_set;
    hsl_qos_sch_mode_get qos_sch_mode_get;
    hsl_qos_queue_tx_buf_status_set qos_queue_tx_buf_status_set;
    hsl_qos_queue_tx_buf_status_get qos_queue_tx_buf_status_get;
    hsl_qos_port_tx_buf_status_set qos_port_tx_buf_status_set;
    hsl_qos_port_tx_buf_status_get qos_port_tx_buf_status_get;
    hsl_qos_port_red_en_set qos_port_red_en_set;
    hsl_qos_port_red_en_get qos_port_red_en_get;
    hsl_qos_queue_tx_buf_nr_set qos_queue_tx_buf_nr_set;
    hsl_qos_queue_tx_buf_nr_get qos_queue_tx_buf_nr_get;
    hsl_qos_port_tx_buf_nr_set qos_port_tx_buf_nr_set;
    hsl_qos_port_tx_buf_nr_get qos_port_tx_buf_nr_get;
    hsl_qos_port_rx_buf_nr_set qos_port_rx_buf_nr_set;
    hsl_qos_port_rx_buf_nr_get qos_port_rx_buf_nr_get;
    hsl_cosmap_up_queue_set cosmap_up_queue_set;
    hsl_cosmap_up_queue_get cosmap_up_queue_get;
    hsl_cosmap_dscp_queue_set cosmap_dscp_queue_set;
    hsl_cosmap_dscp_queue_get cosmap_dscp_queue_get;
    hsl_qos_port_mode_set qos_port_mode_set;
    hsl_qos_port_mode_get qos_port_mode_get;
    hsl_qos_port_mode_pri_set qos_port_mode_pri_set;
    hsl_qos_port_mode_pri_get qos_port_mode_pri_get;
    hsl_qos_port_default_up_set qos_port_default_up_set;
    hsl_qos_port_default_up_get qos_port_default_up_get;
    hsl_qos_port_sch_mode_set qos_port_sch_mode_set;
    hsl_qos_port_sch_mode_get qos_port_sch_mode_get;
    hsl_qos_port_default_spri_set qos_port_default_spri_set;
    hsl_qos_port_default_spri_get qos_port_default_spri_get;
    hsl_qos_port_default_cpri_set qos_port_default_cpri_set;
    hsl_qos_port_default_cpri_get qos_port_default_cpri_get;
    hsl_qos_port_force_spri_status_set qos_port_force_spri_status_set;
    hsl_qos_port_force_spri_status_get qos_port_force_spri_status_get;
    hsl_qos_port_force_cpri_status_set qos_port_force_cpri_status_set;
    hsl_qos_port_force_cpri_status_get qos_port_force_cpri_status_get;

    hsl_qos_queue_remark_table_set qos_queue_remark_table_set;
    hsl_qos_queue_remark_table_get qos_queue_remark_table_get;
    hsl_port_static_thresh_get port_static_thresh_get;
    hsl_port_static_thresh_set port_static_thresh_set;

    /* Rate */
    hsl_storm_ctrl_frame_set storm_ctrl_frame_set;
    hsl_storm_ctrl_frame_get storm_ctrl_frame_get;
    hsl_storm_ctrl_rate_set storm_ctrl_rate_set;
    hsl_storm_ctrl_rate_get storm_ctrl_rate_get;
    hsl_rate_queue_egrl_set rate_queue_egrl_set;
    hsl_rate_queue_egrl_get rate_queue_egrl_get;
    hsl_rate_port_egrl_set rate_port_egrl_set;
    hsl_rate_port_egrl_get rate_port_egrl_get;
    hsl_rate_port_inrl_set rate_port_inrl_set;
    hsl_rate_port_inrl_get rate_port_inrl_get;
    hsl_rate_port_policer_set rate_port_policer_set;
    hsl_rate_port_policer_get rate_port_policer_get;
    hsl_rate_port_shaper_set rate_port_shaper_set;
    hsl_rate_port_shaper_get rate_port_shaper_get;
    hsl_rate_queue_shaper_set rate_queue_shaper_set;
    hsl_rate_queue_shaper_get rate_queue_shaper_get;
    hsl_rate_acl_policer_set rate_acl_policer_set;
    hsl_rate_acl_policer_get rate_acl_policer_get;
    hsl_rate_port_add_rate_byte_set rate_port_add_rate_byte_set;
    hsl_rate_port_add_rate_byte_get rate_port_add_rate_byte_get;
    hsl_rate_port_gol_flow_en_set rate_port_gol_flow_en_set;
    hsl_rate_port_gol_flow_en_get rate_port_gol_flow_en_get;

    /* Mirror */
    hsl_mirr_analysis_port_set mirr_analysis_port_set;
    hsl_mirr_analysis_port_get mirr_analysis_port_get;
    hsl_mirr_port_in_set mirr_port_in_set;
    hsl_mirr_port_in_get mirr_port_in_get;
    hsl_mirr_port_eg_set mirr_port_eg_set;
    hsl_mirr_port_eg_get mirr_port_eg_get;

    /* Stp */
    hsl_stp_port_state_set stp_port_state_set;
    hsl_stp_port_state_get stp_port_state_get;

    /* IGMP */
    hsl_port_igmps_status_set port_igmps_status_set;
    hsl_port_igmps_status_get port_igmps_status_get;
    hsl_igmp_mld_cmd_set igmp_mld_cmd_set;
    hsl_igmp_mld_cmd_get igmp_mld_cmd_get;
    hsl_port_igmp_join_set port_igmp_join_set;
    hsl_port_igmp_join_get port_igmp_join_get;
    hsl_port_igmp_leave_set port_igmp_leave_set;
    hsl_port_igmp_leave_get port_igmp_leave_get;
    hsl_igmp_rp_set igmp_rp_set;
    hsl_igmp_rp_get igmp_rp_get;
    hsl_igmp_entry_creat_set igmp_entry_creat_set;
    hsl_igmp_entry_creat_get igmp_entry_creat_get;
    hsl_igmp_entry_static_set igmp_entry_static_set;
    hsl_igmp_entry_static_get igmp_entry_static_get;
    hsl_igmp_entry_leaky_set igmp_entry_leaky_set;
    hsl_igmp_entry_leaky_get igmp_entry_leaky_get;
    hsl_igmp_entry_v3_set igmp_entry_v3_set;
    hsl_igmp_entry_v3_get igmp_entry_v3_get;
    hsl_igmp_entry_queue_set igmp_entry_queue_set;
    hsl_igmp_entry_queue_get igmp_entry_queue_get;
    hsl_port_igmp_mld_learn_limit_set port_igmp_mld_learn_limit_set;
    hsl_port_igmp_mld_learn_limit_get port_igmp_mld_learn_limit_get;
    hsl_port_igmp_mld_learn_exceed_cmd_set port_igmp_mld_learn_exceed_cmd_set;
    hsl_port_igmp_mld_learn_exceed_cmd_get port_igmp_mld_learn_exceed_cmd_get;
    hsl_igmp_sg_entry_set igmp_sg_entry_set;
    hsl_igmp_sg_entry_clear igmp_sg_entry_clear;
    hsl_igmp_sg_entry_show igmp_sg_entry_show;
    hsl_igmp_sg_entry_query igmp_sg_entry_query;

    /* Leaky */
    hsl_uc_leaky_mode_set uc_leaky_mode_set;
    hsl_uc_leaky_mode_get uc_leaky_mode_get;
    hsl_mc_leaky_mode_set mc_leaky_mode_set;
    hsl_mc_leaky_mode_get mc_leaky_mode_get;
    hsl_port_arp_leaky_set port_arp_leaky_set;
    hsl_port_arp_leaky_get port_arp_leaky_get;
    hsl_port_uc_leaky_set port_uc_leaky_set;
    hsl_port_uc_leaky_get port_uc_leaky_get;
    hsl_port_mc_leaky_set port_mc_leaky_set;
    hsl_port_mc_leaky_get port_mc_leaky_get;

    /* MIB API */
    hsl_get_mib_info get_mib_info;
    hsl_get_rx_mib_info get_rx_mib_info;
    hsl_get_tx_mib_info get_tx_mib_info;
    hsl_mib_status_set mib_status_set;
    hsl_mib_status_get mib_status_get;
    hsl_mib_port_flush_counters mib_port_flush_counters;
    hsl_mib_cpukeep_set mib_cpukeep_set;
    hsl_mib_cpukeep_get mib_cpukeep_get;


    /* Acl */
    hsl_acl_list_creat acl_list_creat;
    hsl_acl_list_destroy acl_list_destroy;
    hsl_acl_rule_add acl_rule_add;
    hsl_acl_rule_delete acl_rule_delete;
    hsl_acl_rule_query acl_rule_query;
    hsl_acl_list_bind acl_list_bind;
    hsl_acl_list_unbind acl_list_unbind;
    hsl_acl_status_set acl_status_set;
    hsl_acl_status_get acl_status_get;
    hsl_acl_list_dump acl_list_dump;
    hsl_acl_rule_dump acl_rule_dump;
    hsl_acl_port_udf_profile_set acl_port_udf_profile_set;
    hsl_acl_port_udf_profile_get acl_port_udf_profile_get;
    hsl_acl_rule_active acl_rule_active;
    hsl_acl_rule_deactive acl_rule_deactive;
    hsl_acl_rule_src_filter_sts_set acl_rule_src_filter_sts_set;
    hsl_acl_rule_src_filter_sts_get acl_rule_src_filter_sts_get;
    hsl_acl_rule_get_offset acl_rule_get_offset;
    hsl_acl_rule_sync_multi_portmap acl_rule_sync_multi_portmap;

    /* LED */
    hsl_led_ctrl_pattern_set led_ctrl_pattern_set;
    hsl_led_ctrl_pattern_get led_ctrl_pattern_get;
    hsl_led_ctrl_source_set led_ctrl_source_set;

    /* CoSMap */
    hsl_cosmap_dscp_to_pri_set cosmap_dscp_to_pri_set;
    hsl_cosmap_dscp_to_pri_get cosmap_dscp_to_pri_get;
    hsl_cosmap_dscp_to_dp_set cosmap_dscp_to_dp_set;
    hsl_cosmap_dscp_to_dp_get cosmap_dscp_to_dp_get;
    hsl_cosmap_up_to_pri_set cosmap_up_to_pri_set;
    hsl_cosmap_up_to_pri_get cosmap_up_to_pri_get;
    hsl_cosmap_up_to_dp_set cosmap_up_to_dp_set;
    hsl_cosmap_up_to_dp_get cosmap_up_to_dp_get;
    hsl_cosmap_dscp_to_ehpri_set cosmap_dscp_to_ehpri_set;
    hsl_cosmap_dscp_to_ehpri_get cosmap_dscp_to_ehpri_get;
    hsl_cosmap_dscp_to_ehdp_set cosmap_dscp_to_ehdp_set;
    hsl_cosmap_dscp_to_ehdp_get cosmap_dscp_to_ehdp_get;
    hsl_cosmap_up_to_ehpri_set cosmap_up_to_ehpri_set;
    hsl_cosmap_up_to_ehpri_get cosmap_up_to_ehpri_get;
    hsl_cosmap_up_to_ehdp_set cosmap_up_to_ehdp_set;
    hsl_cosmap_up_to_ehdp_get cosmap_up_to_ehdp_get;
    hsl_cosmap_pri_to_queue_set cosmap_pri_to_queue_set;
    hsl_cosmap_pri_to_queue_get cosmap_pri_to_queue_get;
    hsl_cosmap_pri_to_ehqueue_set cosmap_pri_to_ehqueue_set;
    hsl_cosmap_pri_to_ehqueue_get cosmap_pri_to_ehqueue_get;
    hsl_cosmap_egress_remark_set cosmap_egress_remark_set;
    hsl_cosmap_egress_remark_get cosmap_egress_remark_get;

    /* IP */
    hsl_ip_host_add ip_host_add;
    hsl_ip_host_del ip_host_del;
    hsl_ip_host_get ip_host_get;
    hsl_ip_host_next ip_host_next;
    hsl_ip_host_counter_bind ip_host_counter_bind;
    hsl_ip_host_pppoe_bind ip_host_pppoe_bind;
    hsl_ip_pt_arp_learn_set ip_pt_arp_learn_set;
    hsl_ip_pt_arp_learn_get ip_pt_arp_learn_get;
    hsl_ip_arp_learn_set ip_arp_learn_set;
    hsl_ip_arp_learn_get ip_arp_learn_get;
    hsl_ip_source_guard_set ip_source_guard_set;
    hsl_ip_source_guard_get ip_source_guard_get;
    hsl_ip_unk_source_cmd_set ip_unk_source_cmd_set;
    hsl_ip_unk_source_cmd_get ip_unk_source_cmd_get;
    hsl_ip_arp_guard_set ip_arp_guard_set;
    hsl_ip_arp_guard_get ip_arp_guard_get;
    hsl_arp_unk_source_cmd_set arp_unk_source_cmd_set;
    hsl_arp_unk_source_cmd_get arp_unk_source_cmd_get;
    hsl_ip_route_status_set ip_route_status_set;
    hsl_ip_route_status_get ip_route_status_get;
    hsl_ip_intf_entry_add ip_intf_entry_add;
    hsl_ip_intf_entry_del ip_intf_entry_del;
    hsl_ip_intf_entry_next ip_intf_entry_next;
    hsl_ip_age_time_set ip_age_time_set;
    hsl_ip_age_time_get ip_age_time_get;
    hsl_ip_wcmp_hash_mode_set ip_wcmp_hash_mode_set;
    hsl_ip_wcmp_hash_mode_get ip_wcmp_hash_mode_get;
    hsl_ip_vrf_base_addr_set ip_vrf_base_addr_set;
    hsl_ip_vrf_base_addr_get ip_vrf_base_addr_get;
    hsl_ip_vrf_base_mask_set ip_vrf_base_mask_set;
    hsl_ip_vrf_base_mask_get ip_vrf_base_mask_get;
    hsl_ip_default_route_set ip_default_route_set;
    hsl_ip_default_route_get ip_default_route_get;
    hsl_ip_host_route_set ip_host_route_set;
    hsl_ip_host_route_get ip_host_route_get;
    hsl_ip_wcmp_entry_set ip_wcmp_entry_set;
    hsl_ip_wcmp_entry_get ip_wcmp_entry_get;
    hsl_ip_rfs_ip4_set ip_rfs_ip4_set;
    hsl_ip_rfs_ip6_set ip_rfs_ip6_set;
    hsl_ip_rfs_ip4_del ip_rfs_ip4_del;
    hsl_ip_rfs_ip6_del ip_rfs_ip6_del;
    hsl_default_flow_cmd_set ip_default_flow_cmd_set;
    hsl_default_flow_cmd_get ip_default_flow_cmd_get;
    hsl_default_rt_flow_cmd_set ip_default_rt_flow_cmd_set;
    hsl_default_rt_flow_cmd_get ip_default_rt_flow_cmd_get;
	hsl_ip_glb_lock_time_set ip_glb_lock_time_set;

    /* NAT */
    hsl_nat_add nat_add;
    hsl_nat_del nat_del;
    hsl_nat_get nat_get;
    hsl_nat_next nat_next;
    hsl_nat_counter_bind nat_counter_bind;
    hsl_napt_add napt_add;
    hsl_napt_del napt_del;
    hsl_napt_get napt_get;
    hsl_napt_next napt_next;
    hsl_napt_counter_bind napt_counter_bind;
    hsl_napt_add flow_add;
    hsl_napt_del flow_del;
    hsl_napt_get flow_get;
    hsl_napt_next flow_next;
    hsl_napt_counter_bind flow_counter_bind;
    hsl_nat_status_set nat_status_set;
    hsl_nat_status_get nat_status_get;
    hsl_nat_hash_mode_set nat_hash_mode_set;
    hsl_nat_hash_mode_get nat_hash_mode_get;
    hsl_napt_status_set napt_status_set;
    hsl_napt_status_get napt_status_get;
    hsl_napt_mode_set napt_mode_set;
    hsl_napt_mode_get napt_mode_get;
    hsl_nat_prv_base_addr_set nat_prv_base_addr_set;
    hsl_nat_prv_base_addr_get nat_prv_base_addr_get;
    hsl_nat_prv_base_mask_set nat_prv_base_mask_set;
    hsl_nat_prv_base_mask_get nat_prv_base_mask_get;
    hsl_nat_prv_addr_mode_set nat_prv_addr_mode_set;
    hsl_nat_prv_addr_mode_get nat_prv_addr_mode_get;
    hsl_nat_pub_addr_add nat_pub_addr_add;
    hsl_nat_pub_addr_del nat_pub_addr_del;
    hsl_nat_pub_addr_next nat_pub_addr_next;
    hsl_nat_unk_session_cmd_set nat_unk_session_cmd_set;
    hsl_nat_unk_session_cmd_get nat_unk_session_cmd_get;
    hsl_nat_global_set nat_global_set;
    hsl_flow_cookie_set flow_cookie_set;
    hsl_flow_rfs_set flow_rfs_set;

    /* SEC */
    hsl_sec_norm_item_set sec_norm_item_set;
    hsl_sec_norm_item_get sec_norm_item_get;

    /* Trunk */
    hsl_trunk_group_set trunk_group_set;
    hsl_trunk_group_get trunk_group_get;
    hsl_trunk_hash_mode_set trunk_hash_mode_set;
    hsl_trunk_hash_mode_get trunk_hash_mode_get;
    hsl_trunk_manipulate_sa_set trunk_manipulate_sa_set;
    hsl_trunk_manipulate_sa_get trunk_manipulate_sa_get;

    /* Interface Control */
    hsl_interface_mac_mode_set interface_mac_mode_set;
    hsl_interface_mac_mode_get interface_mac_mode_get;
    hsl_interface_phy_mode_set interface_phy_mode_set;
    hsl_interface_phy_mode_get interface_phy_mode_get;
    hsl_interface_fx100_ctrl_set interface_fx100_ctrl_set;
    hsl_interface_fx100_ctrl_get interface_fx100_ctrl_get;
    hsl_interface_fx100_status_get interface_fx100_status_get;
    hsl_interface_mac06_exch_set interface_mac06_exch_set;
    hsl_interface_mac06_exch_get interface_mac06_exch_get;
    hsl_interface_pad_get	interface_mac_pad_get;
    hsl_interface_pad_set	interface_mac_pad_set;
    hsl_interface_sgmii_get	interface_mac_sgmii_get;
    hsl_interface_sgmii_set	interface_mac_sgmii_set;
#endif
#endif
/*qca808x_start*/
    /* REG Access */
    hsl_phy_get phy_get;
    hsl_phy_set phy_set;
/*qca808x_end*/
    hsl_reg_get reg_get;
    hsl_reg_set reg_set;
    hsl_reg_get mii_reg_get;	/* mht in phy mode */
    hsl_reg_set mii_reg_set;	/* mht in phy mode */
    hsl_reg_field_get reg_field_get;
    hsl_reg_field_set reg_field_set;
    hsl_reg_entries_get reg_entries_get;
    hsl_reg_entries_set reg_entries_set;
    hsl_psgmii_reg_get psgmii_reg_get;
    hsl_psgmii_reg_set psgmii_reg_set;
	hsl_register_dump	register_dump;
	hsl_debug_register_dump	debug_register_dump;
	hsl_debug_psgmii_self_test	debug_psgmii_self_test;
	hsl_phy_dump	 phy_dump;
    hsl_uniphy_reg_get uniphy_reg_get;
    hsl_uniphy_reg_set uniphy_reg_set;
/*qca808x_start*/
      /*INIT*/ hsl_dev_reset dev_reset;
    hsl_dev_clean dev_clean;
/*qca808x_end*/
    hsl_dev_access_set dev_access_set;
/*qca808x_start*/
    hsl_phy_get phy_i2c_get;
    hsl_phy_set phy_i2c_set;
  } hsl_api_t;

  hsl_api_t *hsl_api_ptr_get (a_uint32_t dev_id);

    sw_error_t hsl_api_init (a_uint32_t dev_id);

#if defined(SW_API_LOCK) && (!defined(HSL_STANDALONG))
extern aos_mutex_lock_t sw_hsl_api_lock;
#define FAL_API_LOCK \
{ \
	while(!mutex_trylock(&sw_hsl_api_lock)) \
		udelay(1); \
}
#define FAL_API_UNLOCK  aos_mutex_unlock(&sw_hsl_api_lock)
#else
#define FAL_API_LOCK
#define FAL_API_UNLOCK
#endif

#ifdef __cplusplus
}
#endif				/* __cplusplus */
#endif				/* _SW_API_H */
/*qca808x_end*/
