mirror of
https://github.com/lwfinger/rtl8188eu.git
synced 2024-11-22 04:23:39 +00:00
staging: r8188eu: Convert driver to use external firmware
As originally submitted, this driver acquired its firmware from data statements embedded in the source code. This information has been extracted into a binary file that has been accepted into the linux-firmware git repo as commit ffc47f1 entitled "rtlwifi: Add new firmware files for rtl8188eu". This patch switches the driver to use this file, and deletes the firmware data from the source. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
This commit is contained in:
parent
a27737ea39
commit
d53cd09c9d
5 changed files with 35 additions and 1821 deletions
1
Makefile
1
Makefile
|
@ -33,7 +33,6 @@ OUTSRC_FILES := \
|
||||||
hal/HalPhyRf.o \
|
hal/HalPhyRf.o \
|
||||||
hal/HalPhyRf_8188e.o \
|
hal/HalPhyRf_8188e.o \
|
||||||
hal/HalPwrSeqCmd.o \
|
hal/HalPwrSeqCmd.o \
|
||||||
hal/Hal8188EFWImg_CE.o \
|
|
||||||
hal/Hal8188EPwrSeq.o \
|
hal/Hal8188EPwrSeq.o \
|
||||||
hal/Hal8188ERateAdaptive.o\
|
hal/Hal8188ERateAdaptive.o\
|
||||||
hal/hal_intf.o \
|
hal/hal_intf.o \
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -19,6 +19,7 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define _HAL_INIT_C_
|
#define _HAL_INIT_C_
|
||||||
|
|
||||||
|
#include <linux/firmware.h>
|
||||||
#include <drv_types.h>
|
#include <drv_types.h>
|
||||||
#include <rtw_efuse.h>
|
#include <rtw_efuse.h>
|
||||||
|
|
||||||
|
@ -588,13 +589,15 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
||||||
u8 writeFW_retry = 0;
|
u8 writeFW_retry = 0;
|
||||||
u32 fwdl_start_time;
|
u32 fwdl_start_time;
|
||||||
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
||||||
|
struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
|
||||||
u8 *FwImage;
|
struct device *device = dvobj_to_dev(dvobj);
|
||||||
u32 FwImageLen;
|
|
||||||
struct rt_firmware *pFirmware = NULL;
|
struct rt_firmware *pFirmware = NULL;
|
||||||
|
const struct firmware *fw;
|
||||||
struct rt_firmware_hdr *pFwHdr = NULL;
|
struct rt_firmware_hdr *pFwHdr = NULL;
|
||||||
u8 *pFirmwareBuf;
|
u8 *pFirmwareBuf;
|
||||||
u32 FirmwareLen;
|
u32 FirmwareLen;
|
||||||
|
char fw_name[] = "rtlwifi/rtl8188eufw.bin";
|
||||||
|
static int log_version;
|
||||||
|
|
||||||
RT_TRACE(_module_hal_init_c_, _drv_info_, ("+%s\n", __func__));
|
RT_TRACE(_module_hal_init_c_, _drv_info_, ("+%s\n", __func__));
|
||||||
pFirmware = (struct rt_firmware *)rtw_zmalloc(sizeof(struct rt_firmware));
|
pFirmware = (struct rt_firmware *)rtw_zmalloc(sizeof(struct rt_firmware));
|
||||||
|
@ -603,27 +606,32 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
||||||
goto Exit;
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
FwImage = (u8 *)Rtl8188E_FwImageArray;
|
if (request_firmware(&fw, fw_name, device)) {
|
||||||
FwImageLen = Rtl8188E_FWImgArrayLength;
|
rtStatus = _FAIL;
|
||||||
|
goto Exit;
|
||||||
pFirmware->eFWSource = FW_SOURCE_HEADER_FILE;
|
|
||||||
|
|
||||||
switch (pFirmware->eFWSource) {
|
|
||||||
case FW_SOURCE_IMG_FILE:
|
|
||||||
break;
|
|
||||||
case FW_SOURCE_HEADER_FILE:
|
|
||||||
if (FwImageLen > FW_8188E_SIZE) {
|
|
||||||
rtStatus = _FAIL;
|
|
||||||
RT_TRACE(_module_hal_init_c_, _drv_err_, ("Firmware size exceed 0x%X. Check it.\n", FW_8188E_SIZE));
|
|
||||||
goto Exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
pFirmware->szFwBuffer = FwImage;
|
|
||||||
pFirmware->ulFwLength = FwImageLen;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
if (!fw) {
|
||||||
|
pr_err("Firmware %s not available\n", fw_name);
|
||||||
|
rtStatus = _FAIL;
|
||||||
|
goto Exit;
|
||||||
|
}
|
||||||
|
if (fw->size > FW_8188E_SIZE) {
|
||||||
|
rtStatus = _FAIL;
|
||||||
|
RT_TRACE(_module_hal_init_c_, _drv_err_, ("Firmware size exceed 0x%X. Check it.\n", FW_8188E_SIZE));
|
||||||
|
goto Exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
pFirmware->szFwBuffer = kzalloc(FW_8188E_SIZE, GFP_KERNEL);
|
||||||
|
if (!pFirmware->szFwBuffer) {
|
||||||
|
rtStatus = _FAIL;
|
||||||
|
goto Exit;
|
||||||
|
}
|
||||||
|
memcpy(pFirmware->szFwBuffer, fw->data, fw->size);
|
||||||
|
pFirmware->ulFwLength = fw->size;
|
||||||
pFirmwareBuf = pFirmware->szFwBuffer;
|
pFirmwareBuf = pFirmware->szFwBuffer;
|
||||||
FirmwareLen = pFirmware->ulFwLength;
|
FirmwareLen = pFirmware->ulFwLength;
|
||||||
|
release_firmware(fw);
|
||||||
|
|
||||||
DBG_88E_LEVEL(_drv_info_, "+%s: !bUsedWoWLANFw, FmrmwareLen:%d+\n", __func__, FirmwareLen);
|
DBG_88E_LEVEL(_drv_info_, "+%s: !bUsedWoWLANFw, FmrmwareLen:%d+\n", __func__, FirmwareLen);
|
||||||
|
|
||||||
/* To Check Fw header. Added by tynli. 2009.12.04. */
|
/* To Check Fw header. Added by tynli. 2009.12.04. */
|
||||||
|
@ -633,9 +641,10 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
||||||
pHalData->FirmwareSubVersion = pFwHdr->Subversion;
|
pHalData->FirmwareSubVersion = pFwHdr->Subversion;
|
||||||
pHalData->FirmwareSignature = le16_to_cpu(pFwHdr->Signature);
|
pHalData->FirmwareSignature = le16_to_cpu(pFwHdr->Signature);
|
||||||
|
|
||||||
pr_info("%sFirmware Version %d, SubVersion %d, Signature 0x%x\n",
|
if (!log_version++)
|
||||||
DRIVER_PREFIX, pHalData->FirmwareVersion,
|
pr_info("%sFirmware Version %d, SubVersion %d, Signature 0x%x\n",
|
||||||
pHalData->FirmwareSubVersion, pHalData->FirmwareSignature);
|
DRIVER_PREFIX, pHalData->FirmwareVersion,
|
||||||
|
pHalData->FirmwareSubVersion, pHalData->FirmwareSignature);
|
||||||
|
|
||||||
if (IS_FW_HEADER_EXIST(pFwHdr)) {
|
if (IS_FW_HEADER_EXIST(pFwHdr)) {
|
||||||
/* Shift 32 bytes for FW header */
|
/* Shift 32 bytes for FW header */
|
||||||
|
@ -678,7 +687,7 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
||||||
goto Exit;
|
goto Exit;
|
||||||
}
|
}
|
||||||
RT_TRACE(_module_hal_init_c_, _drv_info_, ("Firmware is ready to run!\n"));
|
RT_TRACE(_module_hal_init_c_, _drv_info_, ("Firmware is ready to run!\n"));
|
||||||
|
kfree(pFirmware->szFwBuffer);
|
||||||
Exit:
|
Exit:
|
||||||
|
|
||||||
kfree(pFirmware);
|
kfree(pFirmware);
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of version 2 of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with
|
|
||||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
#ifndef __INC_HAL8188E_FW_IMG_H
|
|
||||||
#define __INC_HAL8188E_FW_IMG_H
|
|
||||||
|
|
||||||
/* V10(1641) */
|
|
||||||
#define Rtl8188EFWImgArrayLength 13904
|
|
||||||
|
|
||||||
extern const u8 Rtl8188EFwImgArray[Rtl8188EFWImgArrayLength];
|
|
||||||
|
|
||||||
#endif /* __INC_HAL8188E_FW_IMG_H */
|
|
|
@ -31,11 +31,6 @@
|
||||||
#include <drv_types.h>
|
#include <drv_types.h>
|
||||||
#include <hal_intf.h>
|
#include <hal_intf.h>
|
||||||
|
|
||||||
/* 2 Hardware Parameter Files */
|
|
||||||
|
|
||||||
#include "Hal8188EFWImg_CE.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* 2 OutSrc Header Files */
|
/* 2 OutSrc Header Files */
|
||||||
|
|
||||||
#include "odm.h"
|
#include "odm.h"
|
||||||
|
|
Loading…
Reference in a new issue