Files
Linux_Drivers/osdrv/extdrv/wireless/mediatek/mt7603/common/mt_io.c
forum_service 213c880673 add driver of tp、wiegand-gpio and wireless
Change-Id: Ie3c11d9d85cf1a05042f5690ac711856fe8b1ad7
2023-12-22 09:56:05 +08:00

133 lines
3.6 KiB
C

/*
***************************************************************************
* MediaTek Inc.
*
* All rights reserved. source code is an unpublished work and the
* use of a copyright notice does not imply otherwise. This source code
* contains confidential trade secret material of MediaTek. Any attemp
* or participation in deciphering, decoding, reverse engineering or in any
* way altering the source code is stricitly prohibited, unless the prior
* written consent of MediaTek, Inc. is obtained.
***************************************************************************
Module Name:
mt_io.c
*/
#include "rt_config.h"
UINT32 mt_mac_cr_range[] = {
0x60000000, 0x20000, 0x200, /* WF_CFG */
0x60100000, 0x21000, 0x200, /* WF_TRB */
0x60110000, 0x21200, 0x200, /* WF_AGG */
0x60120000, 0x21400, 0x200, /* WF_ARB */
0x60130000, 0x21600, 0x200, /* WF_TMAC */
0x60140000, 0x21800, 0x200, /* WF_RMAC */
0x60150000, 0x21A00, 0x200, /* WF_SEC */
0x60160000, 0x21C00, 0x200, /* WF_DMA */
0x60170000, 0x21E00, 0x200, /* WF_CFGOFF */
0x60180000, 0x22000, 0x1000, /* WF_PF */
0x60190000, 0x23000, 0x200, /* WF_WTBLOFF */
0x601A0000, 0x23200, 0x200, /* WF_ETBF */
0x60300000, 0x24000, 0x400, /* WF_LPON */
0x60310000, 0x24400, 0x200, /* WF_INT */
0x60320000, 0x28000, 0x4000, /* WF_WTBLON */
0x60330000, 0x2C000, 0x200, /* WF_MIB */
0x60400000, 0x2D000, 0x200, /* WF_AON */
0x80020000, 0x00000, 0x2000, /* TOP_CFG */
0x80000000, 0x02000, 0x2000, /* MCU_CFG */
0x50000000, 0x04000, 0x4000, /* PDMA_CFG */
#if defined(MT7603_FPGA) || defined(MT7628_FPGA)
0xA0000000, 0x80000, 0x10000, /* PSE_CFG after remap 2 */
#else
0xA0000000, 0x08000, 0x8000, /* PSE_CFG */
#endif /* MT7603_FPGA */
0x60200000, 0x10000, 0x10000, /* WF_PHY */
0x0, 0x0, 0x0,
};
BOOLEAN mt_mac_cr_range_mapping(UINT32 *mac_addr)
{
UINT32 mac_addr_hif = *mac_addr;
INT idx = 0;
BOOLEAN IsFound = 0;
if (mac_addr_hif > 0x4ffff)
{
do
{
if (mac_addr_hif >= mt_mac_cr_range[idx] &&
mac_addr_hif < (mt_mac_cr_range[idx] + mt_mac_cr_range[idx + 2]))
{
mac_addr_hif -= mt_mac_cr_range[idx];
mac_addr_hif += mt_mac_cr_range[idx + 1];
IsFound = 1;
break;
}
idx += 3;
} while (mt_mac_cr_range[idx] != 0);
}
else
{
IsFound = 1;
}
*mac_addr = mac_addr_hif;
return IsFound;
}
UINT32 mt_physical_addr_map(UINT32 addr)
{
UINT32 global_addr = 0x0, idx = 1;
if (addr < 0x2000)
global_addr = 0x80020000 + addr;
else if ((addr >= 0x2000) && (addr < 0x4000))
global_addr = 0x80000000 + addr - 0x2000;
else if ((addr >= 0x4000) && (addr < 0x8000))
global_addr = 0x50000000 + addr - 0x4000;
else if ((addr >= 0x8000) && (addr < 0x10000))
global_addr = 0xa0000000 + addr - 0x8000;
else if ((addr >= 0x10000) && (addr < 0x20000))
global_addr = 0x60200000 + addr - 0x10000;
else if ((addr >= 0x20000) && (addr < 0x40000))
{
do {
if ((addr >= mt_mac_cr_range[idx]) && (addr < (mt_mac_cr_range[idx]+mt_mac_cr_range[idx+1]))) {
global_addr = mt_mac_cr_range[idx-1]+(addr-mt_mac_cr_range[idx]);
break;
}
idx += 3;
} while (mt_mac_cr_range[idx] != 0);
if (mt_mac_cr_range[idx] == 0)
{
DBGPRINT(RT_DEBUG_OFF, ("unknow addr range = %x\n", addr));
}
}
else if ((addr >= 0x40000) && (addr < 0x80000)) //WTBL Address
{
global_addr = 0xa5000000 + addr - 0x40000;
DBGPRINT(RT_DEBUG_INFO, ("==>global_addr1=0x%x\n", global_addr));
}
else if ((addr >= 0xc0000) && (addr < 0xc0100)) //PSE Client
{
global_addr = 0x800c0000 + addr - 0xc0000;
DBGPRINT(RT_DEBUG_INFO, ("==>global_addr2=0x%x\n", global_addr));
}
else
{
global_addr = addr;
DBGPRINT(RT_DEBUG_INFO, ("==>global_addr3=0x%x\n", global_addr));
}
return global_addr;
}