diff options
| author | ssu-ying hung <ssu-ying.hung@mediatek.com> | 2016-01-22 01:34:17 +0800 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-04-11 11:00:08 +0200 |
| commit | 67913c1deb9e7a60741b6e5dba3aed742cb3bd33 (patch) | |
| tree | 857ce0c9cbc77bb097c3fc6c85cf34679943bb6f | |
| parent | 6673a3d5e192cb7f9461325f36080dcb0e03ecd5 (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>
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; |
