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. The TODO list is also updated. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
851ec8cda8
Коммит
691dd0b7d2
|
@ -30,7 +30,6 @@ r8188eu-y := \
|
|||
hal/HalPhyRf.o \
|
||||
hal/HalPhyRf_8188e.o \
|
||||
hal/HalPwrSeqCmd.o \
|
||||
hal/Hal8188EFWImg_CE.o \
|
||||
hal/Hal8188EPwrSeq.o \
|
||||
hal/Hal8188ERateAdaptive.o\
|
||||
hal/hal_intf.o \
|
||||
|
|
|
@ -2,7 +2,6 @@ TODO:
|
|||
- find and remove remaining code valid only for 5 HGz. Most of the obvious
|
||||
ones have been removed, but things like channel > 14 still exist.
|
||||
- find and remove any code for other chips that is left over
|
||||
- convert to external firmware
|
||||
- convert any remaining unusual variable types
|
||||
- find codes that can use %pM and %Nph formatting
|
||||
- checkpatch.pl fixes - most of the remaining ones are lines too long. Many
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -19,6 +19,7 @@
|
|||
******************************************************************************/
|
||||
#define _HAL_INIT_C_
|
||||
|
||||
#include <linux/firmware.h>
|
||||
#include <drv_types.h>
|
||||
#include <rtw_efuse.h>
|
||||
|
||||
|
@ -588,13 +589,15 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
|||
u8 writeFW_retry = 0;
|
||||
u32 fwdl_start_time;
|
||||
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
||||
|
||||
u8 *FwImage;
|
||||
u32 FwImageLen;
|
||||
struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
|
||||
struct device *device = dvobj_to_dev(dvobj);
|
||||
struct rt_firmware *pFirmware = NULL;
|
||||
const struct firmware *fw;
|
||||
struct rt_firmware_hdr *pFwHdr = NULL;
|
||||
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__));
|
||||
pFirmware = (struct rt_firmware *)rtw_zmalloc(sizeof(struct rt_firmware));
|
||||
|
@ -603,27 +606,32 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
|||
goto Exit;
|
||||
}
|
||||
|
||||
FwImage = (u8 *)Rtl8188E_FwImageArray;
|
||||
FwImageLen = Rtl8188E_FWImgArrayLength;
|
||||
|
||||
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 (request_firmware(&fw, fw_name, device)) {
|
||||
rtStatus = _FAIL;
|
||||
goto Exit;
|
||||
}
|
||||
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;
|
||||
FirmwareLen = pFirmware->ulFwLength;
|
||||
release_firmware(fw);
|
||||
|
||||
DBG_88E_LEVEL(_drv_info_, "+%s: !bUsedWoWLANFw, FmrmwareLen:%d+\n", __func__, FirmwareLen);
|
||||
|
||||
/* To Check Fw header. Added by tynli. 2009.12.04. */
|
||||
|
@ -633,8 +641,10 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
|||
pHalData->FirmwareSubVersion = pFwHdr->Subversion;
|
||||
pHalData->FirmwareSignature = le16_to_cpu(pFwHdr->Signature);
|
||||
|
||||
DBG_88E("%s: fw_ver =%d fw_subver =%d sig = 0x%x\n",
|
||||
__func__, pHalData->FirmwareVersion, pHalData->FirmwareSubVersion, pHalData->FirmwareSignature);
|
||||
if (!log_version++)
|
||||
pr_info("%sFirmware Version %d, SubVersion %d, Signature 0x%x\n",
|
||||
DRIVER_PREFIX, pHalData->FirmwareVersion,
|
||||
pHalData->FirmwareSubVersion, pHalData->FirmwareSignature);
|
||||
|
||||
if (IS_FW_HEADER_EXIST(pFwHdr)) {
|
||||
/* Shift 32 bytes for FW header */
|
||||
|
@ -677,7 +687,7 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter)
|
|||
goto Exit;
|
||||
}
|
||||
RT_TRACE(_module_hal_init_c_, _drv_info_, ("Firmware is ready to run!\n"));
|
||||
|
||||
kfree(pFirmware->szFwBuffer);
|
||||
Exit:
|
||||
|
||||
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 <hal_intf.h>
|
||||
|
||||
/* 2 Hardware Parameter Files */
|
||||
|
||||
#include "Hal8188EFWImg_CE.h"
|
||||
|
||||
|
||||
/* 2 OutSrc Header Files */
|
||||
|
||||
#include "odm.h"
|
||||
|
|
Загрузка…
Ссылка в новой задаче