SAMA5D4 Xplained Ultra Board BSP
guowenxue
2019-08-19 2e7235d10c6dbff81960282e1a1e2e798f9b8db8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "btc/mp_precomp.h"
#include <hal_btcoex_wifionly.h>
 
struct  wifi_only_cfg GLBtCoexistWifiOnly;
 
void halwifionly_write1byte(PVOID pwifionlyContext, u32 RegAddr, u8 Data)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    rtw_write8(Adapter, RegAddr, Data);
}
 
void halwifionly_write2byte(PVOID pwifionlyContext, u32 RegAddr, u16 Data)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    rtw_write16(Adapter, RegAddr, Data);
}
 
void halwifionly_write4byte(PVOID pwifionlyContext, u32 RegAddr, u32 Data)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    rtw_write32(Adapter, RegAddr, Data);
}
 
u8 halwifionly_read1byte(PVOID pwifionlyContext, u32 RegAddr)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    return rtw_read8(Adapter, RegAddr);
}
 
u16 halwifionly_read2byte(PVOID pwifionlyContext, u32 RegAddr)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    return rtw_read16(Adapter, RegAddr);
}
 
u32 halwifionly_read4byte(PVOID pwifionlyContext, u32 RegAddr)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    return rtw_read32(Adapter, RegAddr);
}
 
void halwifionly_bitmaskwrite1byte(PVOID pwifionlyContext, u32 regAddr, u8 bitMask, u8 data)
{
    u8 originalValue, bitShift = 0;
    u8 i;
 
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    if (bitMask != 0xff) {
        originalValue = rtw_read8(Adapter, regAddr);
        for (i = 0; i <= 7; i++) {
            if ((bitMask >> i) & 0x1)
                break;
        }
        bitShift = i;
        data = ((originalValue) & (~bitMask)) | (((data << bitShift)) & bitMask);
    }
    rtw_write8(Adapter, regAddr, data);
}
 
void halwifionly_phy_set_rf_reg(PVOID pwifionlyContext, u8 eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    phy_set_rf_reg(Adapter, eRFPath, RegAddr, BitMask, Data);
}
 
void halwifionly_phy_set_bb_reg(PVOID pwifionlyContext, u32 RegAddr, u32 BitMask, u32 Data)
{
    struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
    PADAPTER        Adapter = pwifionlycfg->Adapter;
 
    phy_set_bb_reg(Adapter, RegAddr, BitMask, Data);
}
 
void hal_btcoex_wifionly_switchband_notify(PADAPTER padapter)
{
    HAL_DATA_TYPE    *pHalData = GET_HAL_DATA(padapter);
    u8 is_5g = _FALSE;
 
    if (pHalData->current_band_type == BAND_ON_5G)
        is_5g = _TRUE;
 
    if (IS_HARDWARE_TYPE_8822B(padapter))
        ex_hal8822b_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
    else if (IS_HARDWARE_TYPE_8821C(padapter))
        ex_hal8821c_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
}
 
void hal_btcoex_wifionly_scan_notify(PADAPTER padapter)
{
    HAL_DATA_TYPE    *pHalData = GET_HAL_DATA(padapter);
    u8 is_5g = _FALSE;
 
    if (pHalData->current_band_type == BAND_ON_5G)
        is_5g = _TRUE;
 
    if (IS_HARDWARE_TYPE_8822B(padapter))
        ex_hal8822b_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
    else if (IS_HARDWARE_TYPE_8821C(padapter))
        ex_hal8821c_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
}
 
void hal_btcoex_wifionly_hw_config(PADAPTER padapter)
{
    struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;
 
    if (IS_HARDWARE_TYPE_8723B(padapter))
        ex_hal8723b_wifi_only_hw_config(pwifionlycfg);
    else if (IS_HARDWARE_TYPE_8822B(padapter))
        ex_hal8822b_wifi_only_hw_config(pwifionlycfg);
    else if (IS_HARDWARE_TYPE_8821C(padapter))
        ex_hal8821c_wifi_only_hw_config(pwifionlycfg);
}
 
void hal_btcoex_wifionly_initlizevariables(PADAPTER padapter)
{
    struct wifi_only_cfg        *pwifionlycfg = &GLBtCoexistWifiOnly;
    struct wifi_only_haldata    *pwifionly_haldata = &pwifionlycfg->haldata_info;
    HAL_DATA_TYPE    *pHalData = GET_HAL_DATA(padapter);
 
    _rtw_memset(&GLBtCoexistWifiOnly, 0, sizeof(GLBtCoexistWifiOnly));
 
    pwifionlycfg->Adapter = padapter;
 
#ifdef CONFIG_PCI_HCI
    pwifionlycfg->chip_interface = WIFIONLY_INTF_PCI;
#elif defined(CONFIG_USB_HCI)
    pwifionlycfg->chip_interface = WIFIONLY_INTF_USB;
#elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
    pwifionlycfg->chip_interface = WIFIONLY_INTF_SDIO;
#else
    pwifionlycfg->chip_interface = WIFIONLY_INTF_UNKNOWN;
#endif
 
    pwifionly_haldata->customer_id = CUSTOMER_NORMAL;
    pwifionly_haldata->efuse_pg_antnum = pHalData->EEPROMBluetoothAntNum;
    pwifionly_haldata->efuse_pg_antpath = pHalData->ant_path;
    pwifionly_haldata->rfe_type = pHalData->rfe_type;
    pwifionly_haldata->ant_div_cfg = pHalData->AntDivCfg;
}