/****************************************************************************** * Copyright (c) 2021, MaxLinear, Inc. * * For licensing information, see the file 'LICENSE' in the root folder of * this software module. *******************************************************************************/ #include #include #include #include "datapath.h" #include "datapath_tx.h" #include "datapath_api_fn.h" #include "datapath_instance.h" #include "datapath_swdev_api.h" struct fn_list { char *name; void *f1; void *f2; }; struct fn_list fn_list[] = { { "dp_rx_enable_fn", &dp_rx_enable_fn, &dp_rx_enable2 }, { "dp_shaper_conf_set_fn", &dp_shaper_conf_set_fn, &dp_shaper_conf_set2 }, { "dp_shaper_conf_get_fn", &dp_shaper_conf_get_fn, &dp_shaper_conf_get2 }, { "dp_node_link_add_fn", &dp_node_link_add_fn, &dp_node_link_add2 }, { "dp_queue_map_set_fn", &dp_queue_map_set_fn, &dp_queue_map_set2 }, { "dp_queue_map_get_fn", &dp_queue_map_get_fn, &dp_queue_map_get2 }, { "dp_vlan_set_fn", &dp_vlan_set_fn, &dp_vlan_set2 }, { "dp_qos_port_conf_set_fn", &dp_qos_port_conf_set_fn, &dp_qos_port_conf_set2 }, { "dp_qos_link_prio_set_fn", &dp_qos_link_prio_set_fn, &dp_qos_link_prio_set2 }, { "dp_qos_link_prio_get_fn", &dp_qos_link_prio_get_fn, &dp_qos_link_prio_get2 }, { "dp_queue_conf_get_fn", &dp_queue_conf_get_fn, &dp_queue_conf_get2 }, { "dp_queue_conf_set_fn", &dp_queue_conf_set_fn, &dp_queue_conf_set2 }, { "dp_ingress_ctp_tc_map_set_fn", &dp_ingress_ctp_tc_map_set_fn, &dp_ingress_ctp_tc_map_set2 }, { "dp_deq_port_res_get_fn", &dp_deq_port_res_get_fn, &dp_deq_port_res_get2 }, { "dp_node_free_fn", &dp_node_free_fn, &dp_node_free2 }, { "dp_node_alloc_fn", &dp_node_alloc_fn, &dp_node_alloc2 }, { "dp_node_unlink_fn", &dp_node_unlink_fn, &dp_node_unlink2 }, { "dp_meter_alloc_fn", &dp_meter_alloc_fn, &dp_meter_alloc2 }, { "dp_meter_add_fn", &dp_meter_add_fn, &dp_meter_add2 }, { "dp_meter_del_fn", &dp_meter_del_fn, &dp_meter_del2 }, { "dp_set_bp_attr_fn", &dp_set_bp_attr_fn, &dp_set_bp_attr2 }, { "dp_get_mtu_size_fn", &dp_get_mtu_size_fn, &dp_get_mtu_size2 }, { "dp_alloc_port_fn", &dp_alloc_port_fn, &dp_alloc_port2 }, { "dp_alloc_port_ext_fn", &dp_alloc_port_ext_fn, &dp_alloc_port_ext2 }, { "dp_register_dev_fn", &dp_register_dev_fn, &dp_register_dev2 }, { "dp_register_dev_ext_fn", &dp_register_dev_ext_fn, &dp_register_dev_ext2 }, { "dp_register_subif_fn", &dp_register_subif_fn, &dp_register_subif2 }, { "dp_register_subif_ext_fn", &dp_register_subif_ext_fn, &dp_register_subif_ext2 }, { "dp_pce_rule_add_fn", &dp_pce_rule_add_fn, &dp_pce_rule_add2 }, { "dp_pce_rule_del_fn", &dp_pce_rule_del_fn, &dp_pce_rule_del2 }, { "dp_pce_rule_update_fn", &dp_pce_rule_update_fn, &dp_pce_rule_update2 }, { "dp_register_event_cb_fn", &dp_register_event_cb_fn, &dp_register_event_cb2 }, { "dp_xmit_fn", &dp_xmit_fn, &dp_xmit2 }, { "dp_get_netif_subifid_fn", &dp_get_netif_subifid_fn, &dp_get_netif_subifid2 }, { "dp_get_netif_deq_idx_fn", &dp_get_netif_deq_idx_fn, &dp_get_netif_deq_idx2 }, { "dp_is_pmapper_check_fn", &dp_is_pmapper_check_fn, &dp_is_pmapper_check2 }, { "dp_get_tx_cbm_pkt_fn", &dp_get_tx_cbm_pkt_fn, &dp_get_tx_cbm_pkt2 }, { "dp_register_ops_fn", &dp_register_ops_fn, &dp_register_ops2 }, { "dp_rx_fn", &dp_rx_fn, &dp_rx2 }, { "dp_qos_get_q_qocc_fn", &dp_qos_get_q_qocc_fn, &dp_qos_get_q_qocc2 }, { "dp_split_buffer_fn", &dp_split_buffer_fn, &dp_split_buffer2 }, { "dp_replace_ch_fn", &dp_replace_ch_fn, &dp_replace_ch2 }, { "dp_atoi_fn", &dp_atoi_fn, &dp_atoi2 }, { "dp_strncmpi_fn", &dp_strncmpi_fn, &dp_strncmpi2 }, { "dp_get_reinsert_cnt_fn", &dp_get_reinsert_cnt_fn, &dp_get_reinsert_cnt2 }, { "dp_get_lct_cnt_fn", &dp_get_lct_cnt_fn, &dp_get_lct_cnt2 }, { "dp_get_port_prop_fn", &dp_get_port_prop_fn, &dp_get_port_prop2 }, { "dp_get_subif_prop_fn", &dp_get_subif_prop_fn, &dp_get_subif_prop2 }, { "dp_is_ready_fn", &dp_is_ready_fn, &dp_is_ready2 }, { "dp_get_ops_fn", &dp_get_ops_fn, &dp_get_ops2 }, { "dp_set_mtu_size_fn", &dp_set_mtu_size_fn, &dp_set_mtu_size2 }, { "dp_spl_conn_fn", &dp_spl_conn_fn, &dp_spl_conn2 }, { "dp_register_tx_fn", &dp_register_tx_fn, &dp_register_tx2 } }; void proc_fn_read(struct seq_file *s) { int i; for (i = 0; i < ARRAY_SIZE(fn_list); i++) seq_printf(s, "%s=&%lx: %lx\n", fn_list[i].name, (unsigned long)fn_list[i].f1, *(unsigned long *)fn_list[i].f1); } void dp_init_fn(u32 flags) { int i; unsigned long tmp; for (i = 0; i < ARRAY_SIZE(fn_list); i++) { if (flags & DP_PLATFORM_DE_INIT) tmp = 0; else tmp = (unsigned long)fn_list[i].f2; DP_DEBUG(DP_DBG_FLAG_REG, "fn[%d] for %s %px %px -> 0x%lx\n", i, fn_list[i].name, fn_list[i].f1, (void *)*(unsigned long *)fn_list[i].f1, tmp); *(unsigned long *)fn_list[i].f1 = (unsigned long)fn_list[i].f2; } }