summaryrefslogtreecommitdiff
path: root/drivers/staging/rt2860/common/rtmp_mcu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rt2860/common/rtmp_mcu.c')
-rw-r--r--drivers/staging/rt2860/common/rtmp_mcu.c336
1 files changed, 0 insertions, 336 deletions
diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c
deleted file mode 100644
index 80fa4160ed62..000000000000
--- a/drivers/staging/rt2860/common/rtmp_mcu.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * 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., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
-
- Module Name:
- rtmp_mcu.c
-
- Abstract:
- Miniport generic portion header file
-
- Revision History:
- Who When What
- -------- ---------- ----------------------------------------------
-*/
-
-#include "../rt_config.h"
-
-#include <linux/crc-ccitt.h>
-#include <linux/firmware.h>
-
-#ifdef RTMP_MAC_USB
-
-#define FIRMWAREIMAGE_LENGTH 0x1000
-
-#define FIRMWARE_2870_MIN_VERSION 12
-#define FIRMWARE_2870_FILENAME "rt2870.bin"
-MODULE_FIRMWARE(FIRMWARE_2870_FILENAME);
-
-#define FIRMWARE_3070_MIN_VERSION 17
-#define FIRMWARE_3070_FILENAME "rt3070.bin"
-MODULE_FIRMWARE(FIRMWARE_3070_FILENAME);
-
-#define FIRMWARE_3071_MIN_VERSION 17
-#define FIRMWARE_3071_FILENAME "rt3071.bin" /* for RT3071/RT3072 */
-MODULE_FIRMWARE(FIRMWARE_3071_FILENAME);
-
-#else /* RTMP_MAC_PCI */
-
-#define FIRMWAREIMAGE_LENGTH 0x2000
-
-#define FIRMWARE_2860_MIN_VERSION 11
-#define FIRMWARE_2860_FILENAME "rt2860.bin"
-MODULE_FIRMWARE(FIRMWARE_2860_FILENAME);
-
-#define FIRMWARE_3090_MIN_VERSION 19
-#define FIRMWARE_3090_FILENAME "rt3090.bin" /* for RT3090/RT3390 */
-MODULE_FIRMWARE(FIRMWARE_3090_FILENAME);
-
-#endif
-
-/*
- ========================================================================
-
- Routine Description:
- erase 8051 firmware image in MAC ASIC
-
- Arguments:
- Adapter Pointer to our adapter
-
- IRQL = PASSIVE_LEVEL
-
- ========================================================================
-*/
-int RtmpAsicEraseFirmware(struct rt_rtmp_adapter *pAd)
-{
- unsigned long i;
-
- for (i = 0; i < MAX_FIRMWARE_IMAGE_SIZE; i += 4)
- RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, 0);
-
- return 0;
-}
-
-static const struct firmware *rtmp_get_firmware(struct rt_rtmp_adapter *adapter)
-{
- const char *name;
- const struct firmware *fw = NULL;
- u8 min_version;
- struct device *dev;
- int err;
-
- if (adapter->firmware)
- return adapter->firmware;
-
-#ifdef RTMP_MAC_USB
- if (IS_RT3071(adapter)) {
- name = FIRMWARE_3071_FILENAME;
- min_version = FIRMWARE_3071_MIN_VERSION;
- } else if (IS_RT3070(adapter)) {
- name = FIRMWARE_3070_FILENAME;
- min_version = FIRMWARE_3070_MIN_VERSION;
- } else {
- name = FIRMWARE_2870_FILENAME;
- min_version = FIRMWARE_2870_MIN_VERSION;
- }
- dev = &((struct os_cookie *)adapter->OS_Cookie)->pUsb_Dev->dev;
-#else /* RTMP_MAC_PCI */
- if (IS_RT3090(adapter) || IS_RT3390(adapter)) {
- name = FIRMWARE_3090_FILENAME;
- min_version = FIRMWARE_3090_MIN_VERSION;
- } else {
- name = FIRMWARE_2860_FILENAME;
- min_version = FIRMWARE_2860_MIN_VERSION;
- }
- dev = &((struct os_cookie *)adapter->OS_Cookie)->pci_dev->dev;
-#endif
-
- err = request_firmware(&fw, name, dev);
- if (err) {
- dev_err(dev, "firmware file %s request failed (%d)\n",
- name, err);
- return NULL;
- }
-
- if (fw->size < FIRMWAREIMAGE_LENGTH) {
- dev_err(dev, "firmware file %s size is invalid\n", name);
- goto invalid;
- }
-
- /* is it new enough? */
- adapter->FirmwareVersion = fw->data[FIRMWAREIMAGE_LENGTH - 3];
- if (adapter->FirmwareVersion < min_version) {
- dev_err(dev,
- "firmware file %s is too old;"
- " driver requires v%d or later\n",
- name, min_version);
- goto invalid;
- }
-
- /* is the internal CRC correct? */
- if (crc_ccitt(0xffff, fw->data, FIRMWAREIMAGE_LENGTH - 2) !=
- (fw->data[FIRMWAREIMAGE_LENGTH - 2] |
- (fw->data[FIRMWAREIMAGE_LENGTH - 1] << 8))) {
- dev_err(dev, "firmware file %s failed internal CRC\n", name);
- goto invalid;
- }
-
- adapter->firmware = fw;
- return fw;
-
-invalid:
- release_firmware(fw);
- return NULL;
-}
-
-/*
- ========================================================================
-
- Routine Description:
- Load 8051 firmware file into MAC ASIC
-
- Arguments:
- Adapter Pointer to our adapter
-
- Return Value:
- NDIS_STATUS_SUCCESS firmware image load ok
- NDIS_STATUS_FAILURE image not found
-
- IRQL = PASSIVE_LEVEL
-
- ========================================================================
-*/
-int RtmpAsicLoadFirmware(struct rt_rtmp_adapter *pAd)
-{
- const struct firmware *fw;
- int Status = NDIS_STATUS_SUCCESS;
- unsigned long Index;
- u32 MacReg = 0;
-
- fw = rtmp_get_firmware(pAd);
- if (!fw)
- return NDIS_STATUS_FAILURE;
-
- RTMP_WRITE_FIRMWARE(pAd, fw->data, FIRMWAREIMAGE_LENGTH);
-
- /* check if MCU is ready */
- Index = 0;
- do {
- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacReg);
-
- if (MacReg & 0x80)
- break;
-
- RTMPusecDelay(1000);
- } while (Index++ < 1000);
-
- if (Index > 1000) {
- DBGPRINT(RT_DEBUG_ERROR,
- ("NICLoadFirmware: MCU is not ready\n"));
- Status = NDIS_STATUS_FAILURE;
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("<=== %s (status=%d)\n", __func__, Status));
-
- return Status;
-}
-
-int RtmpAsicSendCommandToMcu(struct rt_rtmp_adapter *pAd,
- u8 Command,
- u8 Token, u8 Arg0, u8 Arg1)
-{
- HOST_CMD_CSR_STRUC H2MCmd;
- H2M_MAILBOX_STRUC H2MMailbox;
- unsigned long i = 0;
-
-#ifdef PCIE_PS_SUPPORT
- /* 3090F power solution 3 has hw limitation that needs to ban all mcu command */
- /* when firmware is in radio state. For other chip doesn't have this limitation. */
- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))
- && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd)
- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3)
- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) {
- RTMP_SEM_LOCK(&pAd->McuCmdLock);
- if ((pAd->brt30xxBanMcuCmd == TRUE)
- && (Command != WAKE_MCU_CMD) && (Command != RFOFF_MCU_CMD)) {
- RTMP_SEM_UNLOCK(&pAd->McuCmdLock);
- DBGPRINT(RT_DEBUG_TRACE,
- (" Ban Mcu Cmd %x in sleep mode\n", Command));
- return FALSE;
- } else if ((Command == SLEEP_MCU_CMD)
- || (Command == RFOFF_MCU_CMD)) {
- pAd->brt30xxBanMcuCmd = TRUE;
- } else if (Command != WAKE_MCU_CMD) {
- pAd->brt30xxBanMcuCmd = FALSE;
- }
-
- RTMP_SEM_UNLOCK(&pAd->McuCmdLock);
-
- }
- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))
- && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd)
- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3)
- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)
- && (Command == WAKE_MCU_CMD)) {
-
- do {
- RTMP_IO_FORCE_READ32(pAd, H2M_MAILBOX_CSR,
- &H2MMailbox.word);
- if (H2MMailbox.field.Owner == 0)
- break;
-
- RTMPusecDelay(2);
- DBGPRINT(RT_DEBUG_INFO,
- ("AsicSendCommanToMcu::Mail box is busy\n"));
- } while (i++ < 100);
-
- if (i > 100) {
- DBGPRINT_ERR("H2M_MAILBOX still hold by MCU. command fail\n");
- return FALSE;
- }
-
- H2MMailbox.field.Owner = 1; /* pass ownership to MCU */
- H2MMailbox.field.CmdToken = Token;
- H2MMailbox.field.HighByte = Arg1;
- H2MMailbox.field.LowByte = Arg0;
- RTMP_IO_FORCE_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word);
-
- H2MCmd.word = 0;
- H2MCmd.field.HostCommand = Command;
- RTMP_IO_FORCE_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word);
-
- } else
-#endif /* PCIE_PS_SUPPORT // */
- {
- do {
- RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word);
- if (H2MMailbox.field.Owner == 0)
- break;
-
- RTMPusecDelay(2);
- } while (i++ < 100);
-
- if (i > 100) {
-#ifdef RTMP_MAC_PCI
-#endif /* RTMP_MAC_PCI // */
- {
- DBGPRINT_ERR("H2M_MAILBOX still hold by MCU. command fail\n");
- }
- return FALSE;
- }
-#ifdef RTMP_MAC_PCI
-#endif /* RTMP_MAC_PCI // */
-
- H2MMailbox.field.Owner = 1; /* pass ownership to MCU */
- H2MMailbox.field.CmdToken = Token;
- H2MMailbox.field.HighByte = Arg1;
- H2MMailbox.field.LowByte = Arg0;
- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word);
-
- H2MCmd.word = 0;
- H2MCmd.field.HostCommand = Command;
- RTMP_IO_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word);
-
- if (Command != 0x80) {
- }
- }
-#ifdef PCIE_PS_SUPPORT
- /* 3090 MCU Wakeup command needs more time to be stable. */
- /* Before stable, don't issue other MCU command to prevent from firmware error. */
- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))
- && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd)
- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3)
- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)
- && (Command == WAKE_MCU_CMD)) {
- RTMPusecDelay(2000);
- /*Put this is after RF programming. */
- /*NdisAcquireSpinLock(&pAd->McuCmdLock); */
- /*pAd->brt30xxBanMcuCmd = FALSE; */
- /*NdisReleaseSpinLock(&pAd->McuCmdLock); */
- }
-#endif /* PCIE_PS_SUPPORT // */
-
- return TRUE;
-}