summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-05-23 02:42:22 -0600
committerLinux Build Service Account <lnxbuild@localhost>2017-05-23 02:42:22 -0600
commit95761bdb98ade0c6b76a5831bf12ab34ee70311e (patch)
treee5f274c2b3acde5a969f5ec490f98342290a6e41
parent46f40436cfe79c3d7048b67c3f43c5a523f893fb (diff)
parent3a2f6cc0900e4c33b1e6af650afe868b909d7f9f (diff)
downloadandroid_hardware_qcom_wlan-95761bdb98ade0c6b76a5831bf12ab34ee70311e.tar.gz
android_hardware_qcom_wlan-95761bdb98ade0c6b76a5831bf12ab34ee70311e.tar.bz2
android_hardware_qcom_wlan-95761bdb98ade0c6b76a5831bf12ab34ee70311e.zip
Merge 3a2f6cc0900e4c33b1e6af650afe868b909d7f9f on remote branch
Change-Id: I4fdc88a54051012fd28348a7c4dbfc3885f648a5
-rw-r--r--qcwcn/wcnss-service/Android.mk27
-rw-r--r--qcwcn/wcnss-service/wcnss_qmi_client.c246
-rw-r--r--qcwcn/wcnss-service/wcnss_qmi_client.h49
-rw-r--r--qcwcn/wcnss-service/wcnss_service.c582
4 files changed, 0 insertions, 904 deletions
diff --git a/qcwcn/wcnss-service/Android.mk b/qcwcn/wcnss-service/Android.mk
deleted file mode 100644
index 39cdc57..0000000
--- a/qcwcn/wcnss-service/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-ifneq ($(filter msm8916 msm8909,$(TARGET_BOARD_PLATFORM)),)
-ifneq (,$(filter arm aarch64 arm64, $(TARGET_ARCH)))
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE := wcnss_service
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/common/inc/
-LOCAL_SRC_FILES := wcnss_service.c
-ifeq ($(strip $(TARGET_USES_QCOM_WCNSS_QMI)),true)
-LOCAL_CFLAGS += -DWCNSS_QMI
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/qmi/inc
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/qmi/services
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/qmi/platform
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/qmi/src
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/qmi/core/lib/inc
-LOCAL_SRC_FILES += wcnss_qmi_client.c
-endif #TARGET_USES_QCOM_WCNSS_QMI
-LOCAL_SHARED_LIBRARIES := libc libcutils libutils liblog
-ifeq ($(strip $(TARGET_USES_QCOM_WCNSS_QMI)),true)
-LOCAL_SHARED_LIBRARIES += libqmiservices libqmi libqcci_legacy libqmi_client_qmux
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/libmdmdetect/inc
-LOCAL_SHARED_LIBRARIES += libmdmdetect
-endif #TARGET_USES_QCOM_WCNSS_QMI
-LOCAL_MODULE_TAGS := optional
-LOCAL_CFLAGS += -Wall
-include $(BUILD_EXECUTABLE)
-endif
-endif # ifneq ($(filter msm8916 msm8909,$(TARGET_BOARD_PLATFORM)),)
diff --git a/qcwcn/wcnss-service/wcnss_qmi_client.c b/qcwcn/wcnss-service/wcnss_qmi_client.c
deleted file mode 100644
index 28acce1..0000000
--- a/qcwcn/wcnss-service/wcnss_qmi_client.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*--------------------------------------------------------------------------
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of The Linux Foundation nor
- the names of its contributors may be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------*/
-
-#ifdef WCNSS_QMI
-#define LOG_TAG "wcnss_qmi"
-#include <cutils/log.h>
-#include "wcnss_qmi_client.h"
-#include "qmi.h"
-#include "qmi_client.h"
-#include "device_management_service_v01.h"
-#include <cutils/properties.h>
-
-#define SUCCESS 0
-#define FAILED -1
-
-#define WLAN_ADDR_SIZE 6
-#define DMS_QMI_TIMEOUT (2000)
-
-static qmi_client_type dms_qmi_client;
-static int qmi_handle;
-static int dms_init_done = FAILED;
-
-/* Android system property for fetching the modem type */
-#define QMI_UIM_PROPERTY_BASEBAND "ro.baseband"
-
-/* Android system property values for various modem types */
-#define QMI_UIM_PROP_BASEBAND_VALUE_SVLTE_1 "svlte1"
-#define QMI_UIM_PROP_BASEBAND_VALUE_SVLTE_2A "svlte2a"
-#define QMI_UIM_PROP_BASEBAND_VALUE_CSFB "csfb"
-#define QMI_UIM_PROP_BASEBAND_VALUE_SGLTE "sglte"
-#define QMI_UIM_PROP_BASEBAND_VALUE_SGLTE2 "sglte2"
-#define QMI_UIM_PROP_BASEBAND_VALUE_MSM "msm"
-#define QMI_UIM_PROP_BASEBAND_VALUE_APQ "apq"
-#define QMI_UIM_PROP_BASEBAND_VALUE_MDMUSB "mdm"
-#define QMI_UIM_PROP_BASEBAND_VALUE_DSDA "dsda"
-#define QMI_UIM_PROP_BASEBAND_VALUE_DSDA_2 "dsda2"
-
-static char *dms_find_modem_port( char *prop_value_ptr)
-{
- char *qmi_modem_port_ptr = QMI_PORT_RMNET_0;
-
- /* Sanity check */
- if (prop_value_ptr == NULL) {
- ALOGE("%s", "NULL prop_value_ptr, using default port",
- __func__);
- return qmi_modem_port_ptr;
- }
-
- ALOGE("%s: Baseband property value read: %s", __func__,
- prop_value_ptr);
-
- /* Map the port based on the read property */
- if ((strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_SVLTE_1) == 0) ||
- (strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_SVLTE_2A) == 0) ||
- (strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_CSFB) == 0)) {
- qmi_modem_port_ptr = QMI_PORT_RMNET_SDIO_0;
- } else if ((strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_MDMUSB) == 0) ||
- (strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_SGLTE2) == 0)) {
- qmi_modem_port_ptr = QMI_PORT_RMNET_USB_0;
- } else if ((strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_MSM) == 0) ||
- (strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_APQ) == 0) ||
- (strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_SGLTE) == 0)) {
- qmi_modem_port_ptr = QMI_PORT_RMNET_0;
- } else if (strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_DSDA) == 0) {
- /* If it is a DSDA configuration, use the existing API */
- qmi_modem_port_ptr = (char *)QMI_PLATFORM_INTERNAL_USE_PORT_ID;
- } else if (strcmp(prop_value_ptr,
- QMI_UIM_PROP_BASEBAND_VALUE_DSDA_2) == 0) {
- /* If it is a DSDA2 configuration, use the existing API */
- qmi_modem_port_ptr = (char *)QMI_PLATFORM_INTERNAL_USE_PORT_ID;
- } else {
- ALOGE("%s: Property value does not match,using default port:%s",
- __func__, qmi_modem_port_ptr);
- }
-
- ALOGE("%s: QMI port found for modem: %s", __func__, qmi_modem_port_ptr);
-
- return qmi_modem_port_ptr;
-}
-
-int wcnss_init_qmi()
-{
- qmi_client_error_type qmi_client_err;
- qmi_idl_service_object_type dms_service;
- char prop_value[PROPERTY_VALUE_MAX];
- char *qmi_modem_port = NULL;
-
- ALOGE("%s: Initialize wcnss QMI Interface", __func__);
-
- qmi_handle = qmi_init(NULL, NULL);
- if (qmi_handle < 0) {
- ALOGE("%s: Error while initializing qmi", __func__);
- return FAILED;
- }
-
- dms_service = dms_get_service_object_v01();
- if (dms_service == NULL) {
- ALOGE("%s: Not able to get the service handle", __func__);
- goto exit;
- }
-
- /* Find out the modem type */
- memset(prop_value, 0x00, sizeof(prop_value));
- property_get(QMI_UIM_PROPERTY_BASEBAND, prop_value, "");
-
- /* Map to a respective QMI port */
- qmi_modem_port = dms_find_modem_port(prop_value);
- if (qmi_modem_port == NULL) {
- ALOGE("%s: qmi_modem_port is NULL", __func__);
- goto exit;
- }
-
- qmi_client_err = qmi_client_init((const char *)qmi_modem_port,
- dms_service, NULL, dms_service, &dms_qmi_client);
-
- if ((qmi_client_err == QMI_PORT_NOT_OPEN_ERR) &&
- (strcmp(qmi_modem_port, QMI_PORT_RMNET_0) == 0)){
- ALOGE("%s: Retrying with port RMNET_1: %d",
- __func__, qmi_client_err);
- qmi_modem_port = QMI_PORT_RMNET_1;
- qmi_client_err = qmi_client_init((const char *)qmi_modem_port,
- dms_service, NULL, dms_service, &dms_qmi_client);
- }
-
- if (qmi_client_err != QMI_NO_ERR){
- ALOGE("%s: Error while Initializing QMI Client: %d",
- __func__, qmi_client_err);
- goto exit;
- }
-
- dms_init_done = SUCCESS;
- return SUCCESS;
-
-exit:
- qmi_handle = qmi_release(qmi_handle);
- if ( qmi_handle < 0 ) {
- ALOGE("%s: Error while releasing qmi %d",
- __func__, qmi_handle);
- }
- return FAILED;
-}
-
-int wcnss_qmi_get_wlan_address(unsigned char *pBdAddr)
-{
- qmi_client_error_type qmi_client_err;
- dms_get_mac_address_req_msg_v01 addr_req;
- dms_get_mac_address_resp_msg_v01 addr_resp;
-
- if ((dms_init_done == FAILED) || (pBdAddr == NULL)) {
- ALOGE("%s: DMS init fail or pBdAddr is NULL", __func__);
- return FAILED;
- }
-
- /* clear the request content */
- memset(&addr_req, 0, sizeof(addr_req));
-
- /*Request to get the WLAN MAC address */
- addr_req.device = DMS_DEVICE_MAC_WLAN_V01;
-
- qmi_client_err = qmi_client_send_msg_sync(dms_qmi_client,
- QMI_DMS_GET_MAC_ADDRESS_REQ_V01, &addr_req, sizeof(addr_req),
- &addr_resp, sizeof(addr_resp), DMS_QMI_TIMEOUT);
-
- if (qmi_client_err != QMI_NO_ERR){
- ALOGE("%s: Failed to get Rsp from Modem Error:%d",
- __func__, qmi_client_err);
- return FAILED;
- }
-
- ALOGE("%s: Mac Address_valid: %d Mac Address Len: %d",
- __func__, addr_resp.mac_address_valid,
- addr_resp.mac_address_len);
-
- if (addr_resp.mac_address_valid &&
- (addr_resp.mac_address_len == WLAN_ADDR_SIZE)) {
- memcpy(pBdAddr, addr_resp.mac_address,
- addr_resp.mac_address_len);
- ALOGE("%s: Succesfully Read WLAN MAC Address", __func__);
- return SUCCESS;
- } else {
- ALOGE("%s: Failed to Read WLAN MAC Address", __func__);
- return FAILED;
- }
-}
-
-void wcnss_qmi_deinit()
-{
- qmi_client_error_type qmi_client_err;
-
- ALOGE("%s: Deinitialize wcnss QMI Interface", __func__);
-
- if (dms_init_done == FAILED) {
- ALOGE("%s: DMS Service was not Initialized", __func__);
- return;
- }
-
- qmi_client_err = qmi_client_release(dms_qmi_client);
-
- if (qmi_client_err != QMI_NO_ERR){
- ALOGE("%s: Error while releasing qmi_client: %d",
- __func__, qmi_client_err);
- }
-
- qmi_handle = qmi_release(qmi_handle);
- if (qmi_handle < 0) {
- ALOGE("%s: Error while releasing qmi %d",
- __func__, qmi_handle);
- }
-
- dms_init_done = FAILED;
-}
-#endif
diff --git a/qcwcn/wcnss-service/wcnss_qmi_client.h b/qcwcn/wcnss-service/wcnss_qmi_client.h
deleted file mode 100644
index 51fefac..0000000
--- a/qcwcn/wcnss-service/wcnss_qmi_client.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*--------------------------------------------------------------------------
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of The Linux Foundation nor
- the names of its contributors may be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------*/
-#if defined(__BIONIC_FORTIFY)
-#include <sys/system_properties.h>
-#endif
-
-#define MODEM_BASEBAND_PROPERTY "ro.baseband"
-#if defined(__BIONIC_FORTIFY)
-#define MODEM_BASEBAND_PROPERTY_SIZE PROP_VALUE_MAX
-#else
-#define MODEM_BASEBAND_PROPERTY_SIZE 10
-#endif
-#define MODEM_BASEBAND_VALUE_APQ "apq"
-
-#ifdef WCNSS_QMI
-#ifndef WCNSS_QMI_CLIENT_H
-#define WCNSS_QMI_CLIENT_H
-
-int wcnss_init_qmi(void);
-int wcnss_qmi_get_wlan_address(unsigned char *pBdAddr);
-void wcnss_qmi_deinit(void);
-
-#endif
-#endif
diff --git a/qcwcn/wcnss-service/wcnss_service.c b/qcwcn/wcnss-service/wcnss_service.c
deleted file mode 100644
index 9244ea0..0000000
--- a/qcwcn/wcnss-service/wcnss_service.c
+++ /dev/null
@@ -1,582 +0,0 @@
-/*--------------------------------------------------------------------------
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of The Linux Foundation nor
- the names of its contributors may be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <dirent.h>
-#include <ctype.h>
-#include <grp.h>
-#include <utime.h>
-#include <sys/stat.h>
-#include <sys/sendfile.h>
-#define LOG_TAG "wcnss_service"
-#include <cutils/log.h>
-#include <cutils/properties.h>
-#ifdef WCNSS_QMI
-#include "wcnss_qmi_client.h"
-#include "mdm_detect.h"
-#endif
-
-#define SUCCESS 0
-#define FAILED -1
-#define BYTE_0 0
-#define BYTE_1 8
-#define BYTE_2 16
-#define BYTE_3 24
-
-#define MAX_FILE_LENGTH (1024)
-#define WCNSS_MAX_CMD_LEN (128)
-
-/* control messages to wcnss driver */
-#define WCNSS_USR_CTRL_MSG_START 0x00000000
-#define WCNSS_USR_SERIAL_NUM (WCNSS_USR_CTRL_MSG_START + 1)
-#define WCNSS_USR_HAS_CAL_DATA (WCNSS_USR_CTRL_MSG_START + 2)
-#define WCNSS_USR_WLAN_MAC_ADDR (WCNSS_USR_CTRL_MSG_START + 3)
-
-
-#define WCNSS_CAL_CHUNK (3*1024)
-#define WCNSS_CAL_FILE "/data/misc/wifi/WCNSS_qcom_wlan_cal.bin"
-#define WCNSS_FACT_FILE "/data/misc/wifi/WCN_FACTORY"
-#define WCNSS_DEVICE "/dev/wcnss_wlan"
-#define WCNSS_CTRL "/dev/wcnss_ctrl"
-#define WLAN_INI_FILE_DEST "/data/misc/wifi/WCNSS_qcom_cfg.ini"
-#define WLAN_INI_FILE_SOURCE "/system/etc/wifi/WCNSS_qcom_cfg.ini"
-#define WCNSS_HAS_CAL_DATA\
- "/sys/module/wcnsscore/parameters/has_calibrated_data"
-#define WLAN_DRIVER_ATH_DEFAULT_VAL "0"
-
-#define ASCII_A 65
-#define ASCII_a 97
-#define ASCII_0 48
-#define HEXA_A 10
-#define HEX_BASE 16
-
-#ifdef WCNSS_QMI
-#define WLAN_ADDR_SIZE 6
-unsigned char wlan_nv_mac_addr[WLAN_ADDR_SIZE];
-#define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
-#define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
-
-/* As we Want to write in 00:0a:f5:11:22:33 format in sysfs file
- so taking mac length as 12 char + 5 for ":" + NULL
- */
-#define WLAN_MAC_ADDR_STRING 18
-#endif
-
-int wcnss_write_cal_data(int fd_dev)
-{
- int rcount = 0;
- int size = 0;
- int rc = 0;
- int wcount = 0;
- int fd_file;
- struct stat st;
-
- char buf[WCNSS_CAL_CHUNK];
-
- ALOGI("wcnss_write_cal_data trying to write cal");
-
- rc = stat(WCNSS_CAL_FILE, &st);
- if (rc < 0) {
- ALOGE("Failed to stat cal file : %s",
- strerror(errno));
- goto exit;
- }
-
- size = st.st_size;
-
- fd_file = open(WCNSS_CAL_FILE, O_RDONLY);
- if (fd_file < 0) {
- ALOGE("cal file doesn't exist: %s",
- strerror(errno));
- rc = fd_file;
- goto exit;
- }
-
- /* write the file size first, so that platform driver knows
- * when it recieves the full data */
- wcount = write(fd_dev, (void *)&size, 4);
- if (wcount != 4) {
- ALOGE("Failed to write to wcnss device : %s",
- strerror(errno));
- rc = wcount;
- goto exit_close;
- }
-
- do {
- rcount = read(fd_file, (void *)buf, sizeof(buf));
- if (rcount < 0) {
- ALOGE("Failed to read from cal file ; %s",
- strerror(errno));
- rc = rcount;
- goto exit_remove;
- }
-
- if (!rcount)
- break;
-
- wcount = write(fd_dev, buf, rcount);
- if (wcount < 0) {
- ALOGE("Failed to write to wcnss device : %s",
- strerror(errno));
- rc = wcount;
- goto exit_close;
- }
-
- } while (rcount);
- close(fd_file);
-
- return SUCCESS;
-
-exit_remove:
- close(fd_file);
- remove("WCNSS_CAL_FILE");
- return rc;
-
-exit_close:
- close(fd_file);
-
-exit:
- return rc;
-}
-
-
-int wcnss_read_and_store_cal_data(int fd_dev)
-{
- int rcount = 0;
- int wcount = 0;
- int fd_file = -1;
- int rc = 0;
-
- char buf[WCNSS_CAL_CHUNK];
-
- ALOGI("wcnss_read_and_store_cal_data trying to read cal");
-
- do {
- /* wait on this read until data comes from fw */
- rcount = read(fd_dev, (void *)buf, sizeof(buf));
- if (rcount < 0) {
- ALOGE("Failed to read from wcnss device : %s",
- strerror(errno));
- rc = rcount;
- goto exit;
- }
-
- /* truncate the file only if there is fw data, this read
- * may never return if the fw decides that no more cal is
- * required; and the data we have now is good enough.
- */
- if (fd_file < 0) {
- fd_file = open(WCNSS_CAL_FILE, O_WRONLY
- | O_CREAT | O_TRUNC, 0664);
- if (fd_file < 0) {
- ALOGE("Failed to open cal file : %s",
- strerror(errno));
- rc = fd_file;
- goto exit;
- }
- }
-
- if (!rcount)
- break;
-
- wcount = write(fd_file, buf, rcount);
- if (wcount < 0) {
- ALOGE("Failed to write to cal file : %s",
- strerror(errno));
- rc = wcount;
- goto exit_remove;
- }
-
- } while (rcount);
-
- close(fd_file);
-
- return SUCCESS;
-
-exit_remove:
- close(fd_file);
- remove(WCNSS_CAL_FILE);
-
-exit:
- return rc;
-}
-
-
-void find_full_path(char *cur_dir, char *file_to_find, char *full_path)
-{
- DIR *dir;
- struct stat st;
- struct dirent *dr;
- char cwd[1024];
- int rc;
-
- chdir(cur_dir);
-
- dir = opendir(".");
-
- if (dir != NULL) {
- while ((dr = readdir(dir))) {
-
- rc = lstat(dr->d_name, &st);
- if (rc < 0) {
- ALOGE("lstat failed %s", strerror(errno));
- return;
- }
- if (S_ISDIR(st.st_mode)) {
- if ((strcmp(dr->d_name, ".")) &&
- (strcmp(dr->d_name, ".."))) {
- find_full_path(dr->d_name,
- file_to_find, full_path);
- }
- } else if (!strcmp(file_to_find, dr->d_name)) {
- getcwd(cwd, sizeof(cwd));
- snprintf(full_path, MAX_FILE_LENGTH, "%s/%s",
- cwd, file_to_find);
- }
- }
- closedir(dir);
- }
-
- chdir("..");
-}
-
-void setup_wlan_config_file()
-{
- int rfd;
- int wfd;
- struct stat st_dest, st_src;
- int rc_dest;
- int rc;
- struct group *grp;
- struct utimbuf new_time;
-
- rc = stat(WLAN_INI_FILE_SOURCE, &st_src);
- if (rc != 0) {
- ALOGE("source file do not exist %s", WLAN_INI_FILE_SOURCE);
- return;
- }
-
- rc_dest = stat(WLAN_INI_FILE_DEST, &st_dest);
- if (rc_dest == 0 && st_dest.st_size &&
- (st_dest.st_mtime > st_src.st_mtime)) {
- ALOGE("wlan ini file exists %s and is newer than %s",
- WLAN_INI_FILE_DEST, WLAN_INI_FILE_SOURCE);
- goto out_nocopy;
- }
-
- rfd = open(WLAN_INI_FILE_SOURCE, O_RDONLY);
- if (rfd < 0) {
- ALOGE("Failed to open ini source file: %s", strerror(errno));
- return;
- }
-
- wfd = open(WLAN_INI_FILE_DEST, O_WRONLY | O_CREAT | O_TRUNC, 0660);
- if (wfd < 0) {
- ALOGE("Failed to open ini dest file: %s", strerror(errno));
- close(rfd);
- return;
- }
-
- rc = sendfile(wfd, rfd, 0, st_src.st_size);
- if (rc != st_src.st_size) {
- ALOGE("Failed to copy ini file: %s", strerror(errno));
- goto out;
- }
-
- new_time.actime = st_src.st_atime;
- new_time.modtime = st_src.st_mtime;
-
- rc = utime(WLAN_INI_FILE_DEST, &new_time);
- if (rc != 0)
- ALOGE("could not preserve the timestamp %s", strerror(errno));
-
- grp = getgrnam("wifi");
- if (grp != NULL) {
- rc = chown(WLAN_INI_FILE_DEST, -1, grp->gr_gid);
- if (rc != 0)
- ALOGE("Failed change group of ini file %s", strerror(errno));
- } else {
- ALOGE("Failed to get group wifi %s", strerror(errno));
- }
-
- property_set("wlan.driver.config", WLAN_INI_FILE_DEST);
-
-out:
- close(rfd);
- close(wfd);
- return;
-
-out_nocopy:
- property_set("wlan.driver.config", WLAN_INI_FILE_DEST);
- return;
-}
-unsigned int convert_string_to_hex(char* string)
-{
- int idx = 0;
- unsigned long int hex_num = 0;
- for(idx; string[idx] != '\0'; idx++){
- if(isalpha(string[idx])) {
- if(string[idx] >='a' && string[idx] <='f') {
- hex_num = hex_num * HEX_BASE + ((int)string[idx]
- - ASCII_a + HEXA_A);
- } else if ( string[idx] >='A' && string[idx] <='F') {
- hex_num = hex_num * HEX_BASE + ((int)string[idx]
- - ASCII_A + HEXA_A);
- } else
- hex_num = hex_num * HEX_BASE + (int)string[idx];
- } else {
- hex_num = hex_num * HEX_BASE + (string[idx]- ASCII_0);
- }
- }
- hex_num = hex_num & 0xFFFFFFFF;
- return hex_num;
-}
-
-
-void setup_wcnss_parameters(int *cal, int nv_mac_addr)
-{
- char msg[WCNSS_MAX_CMD_LEN];
- char serial[PROPERTY_VALUE_MAX];
- int fd, rc, pos = 0;
- struct stat st;
- unsigned int serial_num = 0;
-
- fd = open(WCNSS_CTRL, O_WRONLY);
- if (fd < 0) {
- ALOGE("Failed to open %s : %s", WCNSS_CTRL, strerror(errno));
- return;
- }
-
- rc = property_get("ro.serialno", serial, "");
- if (rc) {
- serial_num = convert_string_to_hex(serial);
- ALOGE("Serial Number is %x", serial_num);
-
- msg[pos++] = WCNSS_USR_SERIAL_NUM >> BYTE_1;
- msg[pos++] = WCNSS_USR_SERIAL_NUM >> BYTE_0;
- msg[pos++] = serial_num >> BYTE_3;
- msg[pos++] = serial_num >> BYTE_2;
- msg[pos++] = serial_num >> BYTE_1;
- msg[pos++] = serial_num >> BYTE_0;
-
- if (write(fd, msg, pos) < 0) {
- ALOGE("Failed to write to %s : %s", WCNSS_CTRL,
- strerror(errno));
- goto fail;
- }
- }
-
-#ifdef WCNSS_QMI
- if (SUCCESS == nv_mac_addr)
- {
- pos = 0;
- msg[pos++] = WCNSS_USR_WLAN_MAC_ADDR >> BYTE_1;
- msg[pos++] = WCNSS_USR_WLAN_MAC_ADDR >> BYTE_0;
- msg[pos++] = wlan_nv_mac_addr[0];
- msg[pos++] = wlan_nv_mac_addr[1];
- msg[pos++] = wlan_nv_mac_addr[2];
- msg[pos++] = wlan_nv_mac_addr[3];
- msg[pos++] = wlan_nv_mac_addr[4];
- msg[pos++] = wlan_nv_mac_addr[5];
-
- ALOGI("WLAN MAC Addr:" MAC_ADDRESS_STR,
- MAC_ADDR_ARRAY(wlan_nv_mac_addr));
-
- if (write(fd, msg, pos) < 0) {
- ALOGE("Failed to write to %s : %s", WCNSS_CTRL,
- strerror(errno));
- goto fail;
- }
- }
-#endif
-
- pos = 0;
- msg[pos++] = WCNSS_USR_HAS_CAL_DATA >> BYTE_1;
- msg[pos++] = WCNSS_USR_HAS_CAL_DATA >> BYTE_0;
-
- rc = stat(WCNSS_FACT_FILE, &st);
- if (rc == 0) {
- ALOGE("Factory file found, deleting cal file");
- unlink(WCNSS_CAL_FILE);
- goto fail_resp;
- }
-
- rc = stat(WCNSS_CAL_FILE, &st);
- if (rc != 0) {
- ALOGE("CAL file not found");
- goto fail_resp;
- }
-
- /* has cal data */
- msg[pos++] = 1;
-
- if (write(fd, msg, pos) < 0) {
- ALOGE("Failed to write to %s : %s", WCNSS_CTRL,
- strerror(errno));
- goto fail;
- }
-
- ALOGI("Correctly triggered cal file");
- *cal = SUCCESS;
- close(fd);
- return;
-
-fail_resp:
- msg[pos++] = 0;
- if (write(fd, msg, pos) < 0)
- ALOGE("Failed to write to %s : %s", WCNSS_CTRL,
- strerror(errno));
-
-fail:
- *cal = FAILED;
- close(fd);
- return;
-}
-
-void setup_wlan_driver_ath_prop()
-{
- property_set("wlan.driver.ath", WLAN_DRIVER_ATH_DEFAULT_VAL);
-}
-
-#ifdef WCNSS_QMI
-int check_modem_compatability(struct dev_info *mdm_detect_info)
-{
- char args[MODEM_BASEBAND_PROPERTY_SIZE] = {0};
- int ret = 0;
- /* Get the hardware property */
- ret = property_get(MODEM_BASEBAND_PROPERTY, args, "");
- if (ret > MODEM_BASEBAND_PROPERTY_SIZE) {
- ALOGE("property [%s] has size [%d] that exceeds max [%d]",
- MODEM_BASEBAND_PROPERTY, ret, MODEM_BASEBAND_PROPERTY_SIZE);
- return 0;
- }
- /* This will check for the type of hardware, and if the
- hardware type needs external modem, it will check if the
- modem type is external*/
- if(!strncmp(MODEM_BASEBAND_VALUE_APQ, args, 3)) {
-
- for (ret = 0; ret < mdm_detect_info->num_modems; ret++) {
- if (mdm_detect_info->mdm_list[ret].type == MDM_TYPE_EXTERNAL) {
- ALOGE("Hardware supports external modem");
- return 1;
- }
- }
- ALOGE("Hardware does not support external modem");
- return 0;
- }
- return 1;
-}
-#endif
-
-int main(int argc, char *argv[])
-{
- int rc;
- int fd_dev, ret_cal;
- int nv_mac_addr = FAILED;
-#ifdef WCNSS_QMI
- struct dev_info mdm_detect_info;
- int nom = 0;
-#endif
-
- setup_wlan_config_file();
-
-#ifdef WCNSS_QMI
- /* Call ESOC API to get the number of modems.
- If the number of modems is not zero, only then proceed
- with the eap_proxy intialization.*/
-
- nom = get_system_info(&mdm_detect_info);
-
- if (nom > 0)
- ALOGE("Failed to get system info, ret %d", nom);
-
- if (mdm_detect_info.num_modems == 0) {
- ALOGE("wcnss_service: No Modem support for this target"
- " number of modems is %d", mdm_detect_info.num_modems);
- goto nomodem;
- }
-
- ALOGE("wcnss_service: num_modems = %d", mdm_detect_info.num_modems);
-
- if(!check_modem_compatability(&mdm_detect_info)) {
- ALOGE("wcnss_service: Target does not have external modem");
- goto nomodem;
- }
-
- /* initialize the DMS client and request the wlan mac address */
-
- if (SUCCESS == wcnss_init_qmi()) {
-
- rc = wcnss_qmi_get_wlan_address(wlan_nv_mac_addr);
-
- if (rc == SUCCESS) {
- nv_mac_addr = SUCCESS;
- ALOGE("WLAN MAC Addr:" MAC_ADDRESS_STR,
- MAC_ADDR_ARRAY(wlan_nv_mac_addr));
- } else
- ALOGE("Failed to Get MAC addr from modem");
-
- wcnss_qmi_deinit();
- }
- else
- ALOGE("Failed to Initialize wcnss QMI Interface");
-
-nomodem:
-#endif
- setup_wcnss_parameters(&ret_cal, nv_mac_addr);
-
- fd_dev = open(WCNSS_DEVICE, O_RDWR);
- if (fd_dev < 0) {
- ALOGE("Failed to open wcnss device : %s",
- strerror(errno));
- return fd_dev;
- }
-
- if (ret_cal != FAILED) {
- rc = wcnss_write_cal_data(fd_dev);
- if (rc != SUCCESS)
- ALOGE("No cal data is written to WCNSS %d", rc);
- else
- ALOGE("Cal data is successfully written to WCNSS");
- }
-
- setup_wlan_driver_ath_prop();
-
- rc = wcnss_read_and_store_cal_data(fd_dev);
- if (rc != SUCCESS)
- ALOGE("Failed to read and save cal data %d", rc);
- else
- ALOGI("Calibration data was successfull written to %s",
- WCNSS_CAL_FILE);
-
- close(fd_dev);
-
- return rc;
-}