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:
Larry Finger 2013-10-19 16:23:12 -05:00
parent a27737ea39
commit d53cd09c9d
5 changed files with 35 additions and 1821 deletions

View file

@ -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

View file

@ -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; }
if (!fw) {
switch (pFirmware->eFWSource) { pr_err("Firmware %s not available\n", fw_name);
case FW_SOURCE_IMG_FILE: rtStatus = _FAIL;
break; goto Exit;
case FW_SOURCE_HEADER_FILE: }
if (FwImageLen > FW_8188E_SIZE) { if (fw->size > FW_8188E_SIZE) {
rtStatus = _FAIL; rtStatus = _FAIL;
RT_TRACE(_module_hal_init_c_, _drv_err_, ("Firmware size exceed 0x%X. Check it.\n", FW_8188E_SIZE)); RT_TRACE(_module_hal_init_c_, _drv_err_, ("Firmware size exceed 0x%X. Check it.\n", FW_8188E_SIZE));
goto Exit; goto Exit;
} }
pFirmware->szFwBuffer = FwImage; pFirmware->szFwBuffer = kzalloc(FW_8188E_SIZE, GFP_KERNEL);
pFirmware->ulFwLength = FwImageLen; if (!pFirmware->szFwBuffer) {
break; 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,6 +641,7 @@ 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);
if (!log_version++)
pr_info("%sFirmware Version %d, SubVersion %d, Signature 0x%x\n", pr_info("%sFirmware Version %d, SubVersion %d, Signature 0x%x\n",
DRIVER_PREFIX, pHalData->FirmwareVersion, DRIVER_PREFIX, pHalData->FirmwareVersion,
pHalData->FirmwareSubVersion, pHalData->FirmwareSignature); pHalData->FirmwareSubVersion, pHalData->FirmwareSignature);
@ -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);

View file

@ -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 */

View file

@ -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"