aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorssu-ying hung <ssu-ying.hung@mediatek.com>2016-01-22 01:34:17 +0800
committerMister Oyster <oysterized@gmail.com>2017-04-11 11:00:08 +0200
commit67913c1deb9e7a60741b6e5dba3aed742cb3bd33 (patch)
tree857ce0c9cbc77bb097c3fc6c85cf34679943bb6f
parent6673a3d5e192cb7f9461325f36080dcb0e03ecd5 (diff)
arm: mediate; remove file open api
User request_firmware api to read CONNSYS patch binary instead of file_open apiq Change-Id: I87982afa8b47958e899a7af8ab0d04a72e3f771a Signed-off-by: ssu-ying hung <ssu-ying.hung@mediatek.com>
-rw-r--r--drivers/misc/mediatek/connectivity/combo/common/core/wmt_conf.c8
-rw-r--r--drivers/misc/mediatek/connectivity/combo/common/core/wmt_lib.c2
-rw-r--r--drivers/misc/mediatek/connectivity/combo/common/linux/include/osal_typedef.h2
-rw-r--r--drivers/misc/mediatek/connectivity/combo/common/linux/wmt_dev.c113
4 files changed, 50 insertions, 75 deletions
diff --git a/drivers/misc/mediatek/connectivity/combo/common/core/wmt_conf.c b/drivers/misc/mediatek/connectivity/combo/common/core/wmt_conf.c
index e866090b0..3ef73bbf4 100644
--- a/drivers/misc/mediatek/connectivity/combo/common/core/wmt_conf.c
+++ b/drivers/misc/mediatek/connectivity/combo/common/core/wmt_conf.c
@@ -415,13 +415,7 @@ INT32 wmt_conf_read_file(VOID)
osal_memset(&gDevWmt.rWmtGenConf, 0, osal_sizeof(gDevWmt.rWmtGenConf));
osal_memset(&gDevWmt.pWmtCfg, 0, osal_sizeof(gDevWmt.pWmtCfg));
-#if 0
- osal_memset(&gDevWmt.cWmtcfgName[0], 0, osal_sizeof(gDevWmt.cWmtcfgName));
-
- osal_strncat(&(gDevWmt.cWmtcfgName[0]), CUST_CFG_WMT_PREFIX,
- osal_sizeof(CUST_CFG_WMT_PREFIX));
- osal_strncat(&(gDevWmt.cWmtcfgName[0]), CUST_CFG_WMT, osal_sizeof(CUST_CFG_WMT));
-#endif
+ osal_strncpy(&(gDevWmt.cWmtcfgName[0]), CUST_CFG_WMT, osal_sizeof(CUST_CFG_WMT));
if (!osal_strlen(&(gDevWmt.cWmtcfgName[0]))) {
WMT_ERR_FUNC("empty Wmtcfg name\n");
diff --git a/drivers/misc/mediatek/connectivity/combo/common/core/wmt_lib.c b/drivers/misc/mediatek/connectivity/combo/common/core/wmt_lib.c
index dbd51923d..c047aaa52 100644
--- a/drivers/misc/mediatek/connectivity/combo/common/core/wmt_lib.c
+++ b/drivers/misc/mediatek/connectivity/combo/common/core/wmt_lib.c
@@ -380,7 +380,7 @@ P_OSAL_EVENT wmt_lib_get_cmd_event(VOID)
INT32 wmt_lib_set_patch_name(PUINT8 cPatchName)
{
- osal_strncpy(gDevWmt.cPatchName, cPatchName, NAME_MAX);
+ osal_strncpy(gDevWmt.cPatchName, cPatchName, NAME_MAX+1);
return 0;
}
diff --git a/drivers/misc/mediatek/connectivity/combo/common/linux/include/osal_typedef.h b/drivers/misc/mediatek/connectivity/combo/common/linux/include/osal_typedef.h
index b78ea65ee..0e8258f3f 100644
--- a/drivers/misc/mediatek/connectivity/combo/common/linux/include/osal_typedef.h
+++ b/drivers/misc/mediatek/connectivity/combo/common/linux/include/osal_typedef.h
@@ -8,6 +8,8 @@
#ifndef _OSAL_TYPEDEF_H_
#define _OSAL_TYPEDEF_H_
+#include <linux/firmware.h>
+
#ifndef _TYPEDEFS_H /*fix redifine*/
typedef char INT8, *PINT8, **PPINT8;
#endif
diff --git a/drivers/misc/mediatek/connectivity/combo/common/linux/wmt_dev.c b/drivers/misc/mediatek/connectivity/combo/common/linux/wmt_dev.c
index 515682757..0ac79167d 100644
--- a/drivers/misc/mediatek/connectivity/combo/common/linux/wmt_dev.c
+++ b/drivers/misc/mediatek/connectivity/combo/common/linux/wmt_dev.c
@@ -51,6 +51,7 @@
#define WMT_DEV_MAJOR 190 /* never used number */
#define WMT_DEV_NUM 1
#define WMT_DEV_INIT_TO_MS (2 * 1000)
+#define WMT_MAX_PATCH_NUM (0x200)
#if CFG_WMT_PROC_FOR_AEE
static struct proc_dir_entry *gWmtAeeEntry = NULL;
@@ -414,14 +415,11 @@ INT32 wmt_dev_rx_timeout(P_OSAL_EVENT pEvent)
INT32 wmt_dev_read_file(PUINT8 pName, const PPUINT8 ppBufPtr, INT32 offset, INT32 padSzBuf)
{
INT32 iRet = -1;
- struct file *fd;
- /* ssize_t iRet; */
+ INT32 Ret = 0;
INT32 file_len;
- INT32 read_len;
PVOID pBuf;
- /* struct cred *cred = get_task_cred(current); */
- const struct cred *cred = get_current_cred();
+ const struct firmware *fw = NULL;
if (!ppBufPtr) {
WMT_ERR_FUNC("invalid ppBufptr!\n");
@@ -429,52 +427,30 @@ INT32 wmt_dev_read_file(PUINT8 pName, const PPUINT8 ppBufPtr, INT32 offset, INT3
}
*ppBufPtr = NULL;
- fd = filp_open(pName, O_RDONLY, 0);
- if (!fd || IS_ERR(fd) || !fd->f_op || !fd->f_op->read) {
- WMT_ERR_FUNC("failed to open or read!(0x%p, %d, %d)\n", fd, cred->fsuid,
- cred->fsgid);
- return -1;
+ Ret = request_firmware(&fw, pName, NULL);
+ if (Ret != 0) {
+ WMT_ERR_FUNC("failed to open or read!(%s), %d\n", pName, Ret);
+ return MTK_WCN_BOOL_FALSE;
}
- file_len = fd->f_path.dentry->d_inode->i_size;
- pBuf = vmalloc((file_len + BCNT_PATCH_BUF_HEADROOM + 3) & ~0x3UL);
+ file_len = fw->size;
+ pBuf = vmalloc((file_len + padSzBuf + 3) & ~0x3UL);
if (!pBuf) {
WMT_ERR_FUNC("failed to vmalloc(%d)\n", (INT32) ((file_len + 3) & ~0x3UL));
goto read_file_done;
}
- do {
- if (fd->f_pos != offset) {
- if (fd->f_op->llseek) {
- if (fd->f_op->llseek(fd, offset, 0) != offset) {
- WMT_ERR_FUNC("failed to seek!!\n");
- goto read_file_done;
- }
- } else {
- fd->f_pos = offset;
- }
- }
-
- read_len = fd->f_op->read(fd, pBuf + padSzBuf, file_len, &fd->f_pos);
- if (read_len != file_len) {
- WMT_WARN_FUNC("read abnormal: read_len(%d), file_len(%d)\n", read_len,
- file_len);
- }
- } while (false);
-
+ memcpy (pBuf + padSzBuf, fw->data, file_len);
iRet = 0;
*ppBufPtr = pBuf;
-
- read_file_done:
+ read_file_done:
if (iRet) {
if (pBuf) {
vfree(pBuf);
}
}
-
- filp_close(fd, NULL);
-
- return (iRet) ? iRet : read_len;
+ release_firmware(fw);
+ return (iRet) ? iRet : file_len;
}
/* TODO: [ChangeFeature][George] refine this function name for general filesystem read operation, not patch only. */
@@ -572,37 +548,27 @@ VOID wmt_dev_patch_info_free(VOID)
MTK_WCN_BOOL wmt_dev_is_file_exist(PUINT8 pFileName)
{
- struct file *fd = NULL;
- /* ssize_t iRet; */
- INT32 fileLen = -1;
- const struct cred *cred = get_current_cred();
- if (pFileName == NULL) {
+ INT32 Ret = 0;
+ const struct firmware *fw = NULL;
+
+ if(pFileName == NULL) {
WMT_ERR_FUNC("invalid file name pointer(%p)\n", pFileName);
return MTK_WCN_BOOL_FALSE;
}
+
if (osal_strlen(pFileName) < osal_strlen(defaultPatchName)) {
WMT_ERR_FUNC("invalid file name(%s)\n", pFileName);
return MTK_WCN_BOOL_FALSE;
}
- /* struct cred *cred = get_task_cred(current); */
+ Ret = request_firmware(&fw, pFileName, NULL);
- fd = filp_open(pFileName, O_RDONLY, 0);
- if (!fd || IS_ERR(fd) || !fd->f_op || !fd->f_op->read) {
- WMT_ERR_FUNC("failed to open or read(%s)!(0x%p, %d, %d)\n", pFileName, fd,
- cred->fsuid, cred->fsgid);
+ if (Ret != 0) {
+ WMT_ERR_FUNC("failed to open or read!(%s)\n", pFileName);
return MTK_WCN_BOOL_FALSE;
}
- fileLen = fd->f_path.dentry->d_inode->i_size;
- filp_close(fd, NULL);
- fd = NULL;
- if (fileLen <= 0) {
- WMT_ERR_FUNC("invalid file(%s), length(%d)\n", pFileName, fileLen);
- return MTK_WCN_BOOL_FALSE;
- }
- WMT_ERR_FUNC("valid file(%s), length(%d)\n", pFileName, fileLen);
+ release_firmware(fw);
return true;
-
}
static unsigned long count_last_access_sdio = 0;
@@ -1162,11 +1128,20 @@ long WMT_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
case WMT_IOCTL_SET_PATCH_NUM:{
pAtchNum = arg;
WMT_INFO_FUNC(" get patch num from launcher = %d\n", pAtchNum);
- wmt_lib_set_patch_num(pAtchNum);
- if (pAtchNum > 0)
- pPatchInfo = kzalloc(sizeof(WMT_PATCH_INFO) *pAtchNum, GFP_ATOMIC);
- else
- WMT_ERR_FUNC("patch num == 0!\n");
+
+ if (pAtchNum > 0 && pAtchNum < WMT_MAX_PATCH_NUM) {
+
+ wmt_lib_set_patch_num(pAtchNum);
+
+ if (!pPatchInfo) {
+ pPatchInfo = kzalloc(sizeof(WMT_PATCH_INFO) * pAtchNum, GFP_ATOMIC);
+ } else {
+ WMT_ERR_FUNC("pPatchInfo!=NULL before alloc\n");
+ break;
+ }
+ } else {
+ WMT_ERR_FUNC("patch num == 0! or > MAX patch number\n");
+ }
if (!pPatchInfo) {
WMT_ERR_FUNC("allocate memory fail!\n");
break;
@@ -1176,7 +1151,6 @@ long WMT_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
case WMT_IOCTL_SET_PATCH_INFO:{
WMT_PATCH_INFO wMtPatchInfo;
- P_WMT_PATCH_INFO pTemp = NULL;
UINT32 dWloadSeq;
static UINT32 counter = 0;
@@ -1192,18 +1166,23 @@ long WMT_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
}
dWloadSeq = wMtPatchInfo.dowloadSeq;
+
+ wMtPatchInfo.patchName[sizeof(wMtPatchInfo.patchName)-1] = '\0';
WMT_DBG_FUNC
("current download seq no is %d,patch name is %s,addres info is 0x%02x,0x%02x,0x%02x,0x%02x\n",
dWloadSeq, wMtPatchInfo.patchName, wMtPatchInfo.addRess[0],
wMtPatchInfo.addRess[1], wMtPatchInfo.addRess[2],
wMtPatchInfo.addRess[3]);
- osal_memcpy(pPatchInfo + dWloadSeq - 1, &wMtPatchInfo,
+ if (dWloadSeq <= pAtchNum) {
+ osal_memcpy(pPatchInfo + dWloadSeq - 1, &wMtPatchInfo,
sizeof(WMT_PATCH_INFO));
- pTemp = pPatchInfo + dWloadSeq - 1;
- if (++counter == pAtchNum) {
- wmt_lib_set_patch_info(pPatchInfo);
- counter = 0;
+
+ if (++counter == pAtchNum) {
+ wmt_lib_set_patch_info(pPatchInfo);
+ counter = 0;
+ }
}
+
}
break;