aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/eap_peer/eap_proxy_qmi.c85
-rw-r--r--src/eap_peer/eap_proxy_qmi.h17
2 files changed, 43 insertions, 59 deletions
diff --git a/src/eap_peer/eap_proxy_qmi.c b/src/eap_peer/eap_proxy_qmi.c
index 6f04acae..bf3bb6af 100644
--- a/src/eap_peer/eap_proxy_qmi.c
+++ b/src/eap_peer/eap_proxy_qmi.c
@@ -81,33 +81,6 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define EAP_PROXY_TARGET_FUSION4_5_PCIE "fusion4_5_pcie"
#define EAP_PROXY_BASEBAND_VALUE_UNDEFINED "undefined"
-#ifdef SIM_AKA_IDENTITY_IMSI
-typedef struct {
- uim_card_state_enum_v01 card_state;
- uim_card_error_code_enum_v01 card_error_code;
- u8 app_state;
- u8 app_type;
-} wpa_uim_card_info_type;
-
-typedef struct {
- int card_ready_idx;
- wpa_uim_card_info_type card_info[QMI_UIM_CARDS_MAX_V01];
- qmi_client_type qmi_uim_svc_client_ptr;
- int qmi_msg_lib_handle;
-} wpa_uim_struct_type;
-
-/* Global variable with the card status */
-wpa_uim_struct_type wpa_uim[MAX_NO_OF_SIM_SUPPORTED];
-#endif /* SIM_AKA_IDENTITY_IMSI */
-
-static int eap_proxy_init_counter = 0;
-
-#ifdef CONFIG_EAP_PROXY_DUAL_SIM
-static Boolean qmi_uim_svc_client_initialized[MAX_NO_OF_SIM_SUPPORTED] = {FALSE, FALSE};
-#else
-static Boolean qmi_uim_svc_client_initialized[MAX_NO_OF_SIM_SUPPORTED] = {FALSE};
-#endif /* CONFIG_EAP_PROXY_DUAL_SIM */
-
static void eap_proxy_eapol_sm_set_bool(struct eap_proxy_sm *sm,
enum eapol_bool_var var, Boolean value);
static Boolean eap_proxy_eapol_sm_get_bool(struct eap_proxy_sm *sm,
@@ -152,9 +125,9 @@ static unsigned int slot = 0;
static unsigned int session_type;
#endif /* CONFIG_EAP_PROXY_DUAL_SIM */
-static Boolean wpa_qmi_register_events(int sim_num);
-static Boolean wpa_qmi_read_card_imsi(int sim_num);
-static Boolean wpa_qmi_read_card_status(int sim_num);
+static Boolean wpa_qmi_register_events(int sim_num, wpa_uim_struct_type *wpa_uim);
+static Boolean wpa_qmi_read_card_imsi(int sim_num, wpa_uim_struct_type *wpa_uim);
+static Boolean wpa_qmi_read_card_status(int sim_num, wpa_uim_struct_type *wpa_uim);
#endif
#define EAP_SUB_TYPE_SIM_START 0x0a
@@ -176,7 +149,7 @@ static void wpa_qmi_client_indication_cb
/* Making this a dummy CB handler */
}
-static Boolean wpa_qmi_register_events(int sim_num)
+static Boolean wpa_qmi_register_events(int sim_num, wpa_uim_struct_type *wpa_uim)
{
qmi_client_error_type qmi_err_code = 0;
uim_event_reg_resp_msg_v01 event_resp_msg;
@@ -218,7 +191,7 @@ static Boolean wpa_qmi_register_events(int sim_num)
}
- if (wpa_qmi_read_card_status(sim_num))
+ if (wpa_qmi_read_card_status(sim_num, wpa_uim))
return TRUE;
else {
wpa_printf(MSG_ERROR,"eap_proxy: Error while reading SIM card status\n");
@@ -226,7 +199,7 @@ static Boolean wpa_qmi_register_events(int sim_num)
}
}
-static Boolean wpa_qmi_read_card_status(int sim_num)
+static Boolean wpa_qmi_read_card_status(int sim_num, wpa_uim_struct_type *wpa_uim)
{
unsigned int i = 0, j = 0;
Boolean card_found = FALSE;
@@ -359,7 +332,7 @@ static int check_for_3_digit()
return 0;
}
-static Boolean wpa_qmi_read_card_imsi(int sim_num)
+static Boolean wpa_qmi_read_card_imsi(int sim_num, wpa_uim_struct_type *wpa_uim)
{
int length;
unsigned char *data;
@@ -565,6 +538,7 @@ static void eap_proxy_post_init(struct eap_proxy_sm *eap_proxy)
static Boolean flag = FALSE;
struct sigaction actions;
int ret = 0;
+ wpa_uim_struct_type *wpa_uim = eap_proxy->wpa_uim;
#ifdef CONFIG_EAP_PROXY_MDM_DETECT
struct dev_info mdm_detect_info;
@@ -607,15 +581,16 @@ static void eap_proxy_post_init(struct eap_proxy_sm *eap_proxy)
eap_proxy->user_selected_sim = 0;
#ifdef CONFIG_EAP_PROXY_DUAL_SIM
- wpa_printf (MSG_ERROR, "eap_proxy: eap_proxy Initializing for DUAL SIM build %d ", MAX_NO_OF_SIM_SUPPORTED);
+ wpa_printf (MSG_ERROR, "eap_proxy: eap_proxy Initializing for DUAL SIM build %d tid %d", MAX_NO_OF_SIM_SUPPORTED, gettid());
#else
- wpa_printf (MSG_ERROR, "eap_proxy: eap_proxy Initializing for Single SIM build %d ", MAX_NO_OF_SIM_SUPPORTED);
+ wpa_printf (MSG_ERROR, "eap_proxy: eap_proxy Initializing for Single SIM build %d tid %d", MAX_NO_OF_SIM_SUPPORTED, gettid());
#endif
+
for (index = 0; index < MAX_NO_OF_SIM_SUPPORTED; ++index) {
#ifdef SIM_AKA_IDENTITY_IMSI
- if ((FALSE == qmi_uim_svc_client_initialized[index]) && (eap_proxy_init_counter == 0)) {
+ if (FALSE == eap_proxy->qmi_uim_svc_client_initialized[index]) {
qmi_client_os_params eap_os_params;
/* Init QMI_UIM service for EAP-SIM/AKA */
os_memset(&eap_os_params, 0, sizeof(qmi_client_os_params));
@@ -635,15 +610,14 @@ static void eap_proxy_post_init(struct eap_proxy_sm *eap_proxy)
flag = FALSE;
continue;
}
- qmi_uim_svc_client_initialized[index] = TRUE;
+ eap_proxy->qmi_uim_svc_client_initialized[index] = TRUE;
- wpa_printf (MSG_ERROR, "eap_proxy: QMI uim service client initialized with success %p %d\n",
+ wpa_printf (MSG_ERROR, "eap_proxy: QMI uim service client initialized with success tid is %d %p %d\n", gettid(),
wpa_uim[index].qmi_uim_svc_client_ptr, qmiErrorCode);
/* Register the card events with the QMI / UIM */
- wpa_qmi_register_events(index);
- } else {
- wpa_printf (MSG_ERROR, "eap_proxy: QMI uim service client is already initialized\n");
- }
+ wpa_qmi_register_events(index, wpa_uim);
+ } else
+ wpa_printf (MSG_ERROR, "eap_proxy: QMI uim service client is already initialized tid is %d \n", gettid());
qmi_client_os_params eap_os_params;
@@ -666,7 +640,7 @@ static void eap_proxy_post_init(struct eap_proxy_sm *eap_proxy)
flag = FALSE;
continue;
}
- wpa_printf (MSG_ERROR, "eap_proxy: QMI auth service client initialized with success %p eapol_proxy=%p\n",
+ wpa_printf (MSG_ERROR, "eap_proxy: QMI auth service client initialized with success tid is %d %p eapol_proxy=%p\n", gettid(),
eap_proxy->qmi_auth_svc_client_ptr[index], eap_proxy);
flag = TRUE;
@@ -685,10 +659,7 @@ static void eap_proxy_post_init(struct eap_proxy_sm *eap_proxy)
eap_proxy_eapol_sm_set_bool(eap_proxy, EAPOL_eapRestart, FALSE);
eap_proxy_eapol_sm_set_bool(eap_proxy, EAPOL_eapResp, FALSE);
eap_proxy_eapol_sm_set_bool(eap_proxy, EAPOL_eapNoResp, FALSE);
- eap_proxy_init_counter++;
- wpa_printf (MSG_DEBUG,
- "eap_proxy: %s: eap_proxy_init_counter %d\n", __func__, eap_proxy_init_counter);
- wpa_printf (MSG_ERROR, "eap_proxy: Eap_proxy initialized successfully\n");
+ wpa_printf (MSG_ERROR, "eap_proxy: Eap_proxy initialized successfully tid is %d \n", gettid());
return NULL;
}
@@ -768,7 +739,6 @@ eap_proxy_init(void *eapol_ctx, struct eapol_callbacks *eapol_cb,
ret = pthread_create(&eap_proxy->thread_id, &attr, eap_proxy_post_init, eap_proxy);
if(ret < 0)
wpa_printf(MSG_ERROR, "eap_proxy: starting thread is failed %d\n", ret);
-
return eap_proxy;
}
@@ -778,14 +748,12 @@ void eap_proxy_deinit(struct eap_proxy_sm *eap_proxy)
int qmiRetCode;
int qmiErrorCode;
int index;
+ wpa_uim_struct_type *wpa_uim = eap_proxy->wpa_uim;
if (NULL == eap_proxy)
return;
pthread_kill(eap_proxy->thread_id, SIGUSR1);
- eap_proxy_init_counter--;
- wpa_printf (MSG_DEBUG,
- "eap_proxy: %s: eap_proxy_init_counter %d\n", __func__, eap_proxy_init_counter);
eap_proxy->proxy_state = EAP_PROXY_DISABLED;
for (index = 0; index < MAX_NO_OF_SIM_SUPPORTED; ++index) {
@@ -807,8 +775,7 @@ void eap_proxy_deinit(struct eap_proxy_sm *eap_proxy)
continue;
}
- if ((TRUE == qmi_uim_svc_client_initialized[index]) &&
- (eap_proxy_init_counter == 0)) {
+ if ((TRUE == eap_proxy->qmi_uim_svc_client_initialized[index])) {
qmiRetCode = qmi_client_release(wpa_uim[index].qmi_uim_svc_client_ptr);
if (QMI_NO_ERR != qmiRetCode) {
wpa_printf (MSG_ERROR, "eap_proxy: Unable to Releas the connection"
@@ -816,7 +783,7 @@ void eap_proxy_deinit(struct eap_proxy_sm *eap_proxy)
index+1, qmiRetCode);
}
wpa_printf(MSG_ERROR, "eap_proxy: Released QMI UIM service client\n");
- qmi_uim_svc_client_initialized[index] = FALSE;
+ eap_proxy->qmi_uim_svc_client_initialized[index] = FALSE;
}
qmiRetCode = qmi_client_release(eap_proxy->qmi_auth_svc_client_ptr[index]);
@@ -1595,7 +1562,7 @@ static Boolean eap_proxy_build_identity(struct eap_proxy_sm *eap_proxy, u8 id, s
identity_format == EAP_IDENTITY_IMSI_RAW || mcc_idx) {
wpa_printf(MSG_ERROR, "eap_proxy: EAP_IDENTITY_IMSI_3GPP_REALM is selected\n");
- if (!wpa_qmi_read_card_status(sim_num)) {
+ if (!wpa_qmi_read_card_status(sim_num, eap_proxy->wpa_uim)) {
wpa_printf(MSG_INFO, "eap_proxy: Read Card Status failed, return\n");
if (NULL != identity) {
os_free(identity);
@@ -1604,7 +1571,7 @@ static Boolean eap_proxy_build_identity(struct eap_proxy_sm *eap_proxy, u8 id, s
return FALSE;
}
- if (!wpa_qmi_read_card_imsi(sim_num)) {
+ if (!wpa_qmi_read_card_imsi(sim_num, eap_proxy->wpa_uim)) {
wpa_printf(MSG_INFO, "eap_proxy: Read Card IMSI failed, return\n");
if (NULL != identity) {
os_free(identity);
@@ -1944,12 +1911,12 @@ int eap_proxy_get_imsi(struct eap_proxy_sm *eap_proxy, char *imsi_buf,
wpa_printf(MSG_ERROR, "eap_proxy:%s: Not initialized\n", __func__);
return FALSE;
}
- if (!wpa_qmi_read_card_status(sim_num)) {
+ if (!wpa_qmi_read_card_status(sim_num, eap_proxy->wpa_uim)) {
wpa_printf(MSG_INFO, "eap_proxy: Card not ready");
return -1;
}
- if (!wpa_qmi_read_card_imsi(sim_num) || imsi == NULL) {
+ if (!wpa_qmi_read_card_imsi(sim_num, eap_proxy->wpa_uim) || imsi == NULL) {
wpa_printf(MSG_INFO, "eap_proxy: Failed to read card IMSI");
return -1;
}
diff --git a/src/eap_peer/eap_proxy_qmi.h b/src/eap_peer/eap_proxy_qmi.h
index d855ee6e..04f0fc9f 100644
--- a/src/eap_peer/eap_proxy_qmi.h
+++ b/src/eap_peer/eap_proxy_qmi.h
@@ -35,6 +35,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "eap_config.h"
#include "eloop.h"
#include "eapol_supp/eapol_supp_sm.h"
+#include "user_identity_module_v01.h"
/*msec Response Timeout*/
#define QMI_RESP_TIME_OUT 2000
@@ -94,6 +95,20 @@ typedef union
}qmi_eap_sync_rsp_data_type;
+typedef struct {
+ uim_card_state_enum_v01 card_state;
+ uim_card_error_code_enum_v01 card_error_code;
+ u8 app_state;
+ u8 app_type;
+} wpa_uim_card_info_type;
+
+typedef struct {
+ int card_ready_idx;
+ wpa_uim_card_info_type card_info[QMI_UIM_CARDS_MAX_V01];
+ qmi_client_type qmi_uim_svc_client_ptr;
+ int qmi_msg_lib_handle;
+} wpa_uim_struct_type;
+
struct eap_proxy_sm {
qmi_client_type qmi_auth_svc_client_ptr[MAX_NO_OF_SIM_SUPPORTED];
@@ -114,6 +129,8 @@ struct eap_proxy_sm {
int user_selected_sim;
int eap_auth_session_flag[MAX_NO_OF_SIM_SUPPORTED];
pthread_t thread_id;
+ wpa_uim_struct_type wpa_uim[MAX_NO_OF_SIM_SUPPORTED];
+ Boolean qmi_uim_svc_client_initialized[MAX_NO_OF_SIM_SUPPORTED];
};
int eap_proxy_allowed_method(struct eap_peer_config *config, int vendor,