lineage_kernel_xcoverpro/drivers/net/wireless/scsc/test/hip_test.c

280 lines
6.8 KiB
C
Raw Normal View History

2023-06-18 22:53:49 +00:00
/******************************************************************************
*
* Copyright (c) 2012 - 2018 Samsung Electronics Co., Ltd. All rights reserved
*
*****************************************************************************/
#include <linux/kthread.h>
#include "unittest.h"
#include "hip.h"
#include "sap.h"
#include "debug.h"
#include "procfs.h"
#include "hip4.h"
#define SLSI_TEST_DEV_SDIO_BLOCK_SIZE 500
bool hip4_sampler_sample_start_stop_q = true;
struct hip4_hip_control test_hip_control;
/* SAP implementations container. Local and static to hip */
static struct hip_sap {
struct sap_api *sap[SAP_TOTAL];
} hip_sap_cont;
/* Register SAP with HIP layer */
int slsi_hip_sap_register(struct sap_api *sap_api)
{
u8 class = sap_api->sap_class;
if (class >= SAP_TOTAL)
return -ENODEV;
hip_sap_cont.sap[class] = sap_api;
return 0;
}
/* UNregister SAP with HIP layer */
int slsi_hip_sap_unregister(struct sap_api *sap_api)
{
u8 class = sap_api->sap_class;
if (class >= SAP_TOTAL)
return -ENODEV;
hip_sap_cont.sap[class] = NULL;
return 0;
}
int slsi_hip_sap_setup(struct slsi_dev *sdev)
{
/* Execute callbacks to intorm Supported version */
u16 version = 0;
if (hip_sap_cont.sap[SAP_MLME]->sap_version_supported) {
version = scsc_wifi_get_hip_config_version_4_u16(&sdev->hip4_inst.hip_control->config_v4, sap_mlme_ver);
if (hip_sap_cont.sap[SAP_MLME]->sap_version_supported(version))
return -ENODEV;
} else {
return -ENODEV;
}
if (hip_sap_cont.sap[SAP_MA]->sap_version_supported) {
version = scsc_wifi_get_hip_config_version_4_u16(&sdev->hip4_inst.hip_control->config_v4, sap_ma_ver);
if (hip_sap_cont.sap[SAP_MA]->sap_version_supported(version))
return -ENODEV;
} else {
return -ENODEV;
}
if (hip_sap_cont.sap[SAP_DBG]->sap_version_supported) {
version = scsc_wifi_get_hip_config_version_4_u16(&sdev->hip4_inst.hip_control->config_v4, sap_debug_ver);
if (hip_sap_cont.sap[SAP_DBG]->sap_version_supported(version))
return -ENODEV;
} else {
return -ENODEV;
}
if (hip_sap_cont.sap[SAP_TST]->sap_version_supported) {
version = scsc_wifi_get_hip_config_version_4_u16(&sdev->hip4_inst.hip_control->config_v4, sap_test_ver);
if (hip_sap_cont.sap[SAP_TST]->sap_version_supported(version))
return -ENODEV;
} else {
return -ENODEV;
}
/* Success */
return 0;
}
/* SAP rx proxy */
int slsi_hip_rx(struct slsi_dev *sdev, struct sk_buff *skb)
{
u16 pid;
/* Udi test : If pid in UDI range then pass to UDI and ignore */
slsi_log_clients_log_signal_fast(sdev, &sdev->log_clients, skb, SLSI_LOG_DIRECTION_TO_HOST);
pid = fapi_get_u16(skb, receiver_pid);
if (pid >= SLSI_TX_PROCESS_ID_UDI_MIN && pid <= SLSI_TX_PROCESS_ID_UDI_MAX) {
kfree_skb(skb);
return 0;
}
if (fapi_is_ma(skb))
return hip_sap_cont.sap[SAP_MA]->sap_handler(sdev, skb);
if (fapi_is_mlme(skb))
return hip_sap_cont.sap[SAP_MLME]->sap_handler(sdev, skb);
if (fapi_is_debug(skb))
return hip_sap_cont.sap[SAP_DBG]->sap_handler(sdev, skb);
if (fapi_is_test(skb))
return hip_sap_cont.sap[SAP_TST]->sap_handler(sdev, skb);
return -EIO;
}
/* value used at all levels in the driver */
int slsi_hip_init(struct slsi_dev *sdev, struct device *dev)
{
SLSI_UNUSED_PARAMETER(dev);
memset(&sdev->hip, 0, sizeof(sdev->hip));
sdev->hip.sdev = sdev;
mutex_init(&sdev->hip.hip_mutex);
sdev->hip4_inst.hip_control = &test_hip_control;
return 0;
}
void slsi_hip_deinit(struct slsi_dev *sdev)
{
mutex_destroy(&sdev->hip.hip_mutex);
}
int slsi_hip_stop(struct slsi_dev *sdev)
{
return 0;
}
int hip4_free_ctrl_slots_count(struct slsi_hip4 *hip)
{
return HIP4_CTL_SLOTS;
}
int scsc_wifi_transmit_frame(struct slsi_hip4 *hip, struct sk_buff *skb, bool ctrl_packet, u8 vif_index, u8 peer_index, u8 priority)
{
struct slsi_dev *sdev = container_of(hip, struct slsi_dev, hip4_inst);
slsi_log_clients_log_signal_fast(sdev, &sdev->log_clients, skb, SLSI_LOG_DIRECTION_FROM_HOST);
consume_skb(skb);
return 0;
}
void slsi_test_bh_work_f(struct work_struct *work)
{
}
/* ALL Dummies to get UT build through goes below */
bool hip4_sampler_sample_q;
bool hip4_sampler_sample_qref;
bool hip4_sampler_sample_int;
bool hip4_sampler_sample_fapi;
bool hip4_sampler_sample_through;
bool hip4_sampler_sample_start_stop_q;
bool hip4_sampler_sample_mbulk;
bool hip4_sampler_sample_qfull;
bool hip4_sampler_sample_mfull;
bool hip4_sampler_vif;
bool hip4_sampler_bot;
bool hip4_sampler_pkt_tx;
void hip4_sampler_update_record(u32 minor, u8 param1, u8 param2, u8 param3, u8 param4)
{
}
void hip4_sampler_create(struct slsi_dev *sdev, struct scsc_mx *mx)
{
}
void hip4_sampler_destroy(struct slsi_dev *sdev, struct scsc_mx *mx)
{
}
int hip4_sampler_register_hip(struct scsc_mx *mx)
{
return 0;
}
int scsc_wifi_fcq_ctrl_q_init(struct scsc_wifi_fcq_ctrl_q *queue)
{
return 0;
}
void scsc_wifi_fcq_ctrl_q_deinit(struct scsc_wifi_fcq_ctrl_q *queue)
{
}
int scsc_wifi_fcq_unicast_qset_init(struct net_device *dev, struct scsc_wifi_fcq_data_qset *qs, u8 qs_num, struct slsi_dev *sdev, u8 vif, struct slsi_peer *peer)
{
return 0;
}
int scsc_wifi_fcq_multicast_qset_init(struct net_device *dev, struct scsc_wifi_fcq_data_qset *qs, struct slsi_dev *sdev, u8 vif)
{
return 0;
}
void scsc_wifi_fcq_qset_deinit(struct net_device *dev, struct scsc_wifi_fcq_data_qset *qs, struct slsi_dev *sdev, u8 vif, struct slsi_peer *peer)
{
}
int scsc_wifi_fcq_transmit_data(struct net_device *dev, struct scsc_wifi_fcq_data_qset *qs, u16 priority, struct slsi_dev *sdev, u8 vif, u8 peer_index)
{
return 0;
}
int scsc_wifi_fcq_receive_data(struct net_device *dev, struct scsc_wifi_fcq_data_qset *qs, u16 priority, struct slsi_dev *sdev, u8 vif, u8 peer_index)
{
return 0;
}
int scsc_wifi_fcq_receive_data_no_peer(struct net_device *dev, u16 priority, struct slsi_dev *sdev, u8 vif, u8 peer_index)
{
return 0;
}
void scsc_wifi_fcq_pause_queues(struct slsi_dev *sdev)
{
}
void scsc_wifi_fcq_unpause_queues(struct slsi_dev *sdev)
{
}
int scsc_wifi_fcq_transmit_ctrl(struct net_device *dev, struct scsc_wifi_fcq_ctrl_q *queue)
{
return 0;
}
int scsc_wifi_fcq_receive_ctrl(struct net_device *dev, struct scsc_wifi_fcq_ctrl_q *queue)
{
return 0;
}
int scsc_wifi_fcq_update_smod(struct scsc_wifi_fcq_data_qset *qs, enum scsc_wifi_fcq_ps_state peer_ps_state,
enum scsc_wifi_fcq_queue_set_type type)
{
return 0;
}
int scsc_wifi_fcq_8021x_port_state(struct net_device *dev, struct scsc_wifi_fcq_data_qset *qs, enum scsc_wifi_fcq_8021x_state state)
{
return 0;
}
int scsc_wifi_fcq_stat_queue(struct scsc_wifi_fcq_q_header *queue,
struct scsc_wifi_fcq_q_stat *queue_stat,
int *qmod, int *qcod)
{
return 0;
}
int scsc_wifi_fcq_stat_queueset(struct scsc_wifi_fcq_data_qset *queue_set,
struct scsc_wifi_fcq_q_stat *queue_stat,
int *smod, int *scod, enum scsc_wifi_fcq_8021x_state *cp_state,
u32 *peer_ps_state_transitions)
{
return 0;
}
void slsi_hip_reprocess_skipped_data_bh(struct slsi_dev *sdev)
{
}