This source file includes following definitions.
- HalPwrSeqCmdParsing
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <drv_types.h>
24 #include <rtw_debug.h>
25 #include <HalPwrSeqCmd.h>
26
27
28
29
30
31
32
33
34
35
36
37 u8 HalPwrSeqCmdParsing(
38 struct adapter *padapter,
39 u8 CutVersion,
40 u8 FabVersion,
41 u8 InterfaceType,
42 WLAN_PWR_CFG PwrSeqCmd[]
43 )
44 {
45 WLAN_PWR_CFG PwrCfgCmd;
46 u8 bPollingBit = false;
47 u32 AryIdx = 0;
48 u8 value = 0;
49 u32 offset = 0;
50 u32 pollingCount = 0;
51 u32 maxPollingCnt = 5000;
52
53 do {
54 PwrCfgCmd = PwrSeqCmd[AryIdx];
55
56 RT_TRACE(
57 _module_hal_init_c_,
58 _drv_info_,
59 (
60 "HalPwrSeqCmdParsing: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
61 GET_PWR_CFG_OFFSET(PwrCfgCmd),
62 GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
63 GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
64 GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
65 GET_PWR_CFG_BASE(PwrCfgCmd),
66 GET_PWR_CFG_CMD(PwrCfgCmd),
67 GET_PWR_CFG_MASK(PwrCfgCmd),
68 GET_PWR_CFG_VALUE(PwrCfgCmd)
69 )
70 );
71
72
73 if (
74 (GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
75 (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
76 (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType)
77 ) {
78 switch (GET_PWR_CFG_CMD(PwrCfgCmd)) {
79 case PWR_CMD_READ:
80 RT_TRACE(
81 _module_hal_init_c_,
82 _drv_info_,
83 ("HalPwrSeqCmdParsing: PWR_CMD_READ\n")
84 );
85 break;
86
87 case PWR_CMD_WRITE:
88 RT_TRACE(
89 _module_hal_init_c_,
90 _drv_info_,
91 ("HalPwrSeqCmdParsing: PWR_CMD_WRITE\n")
92 );
93 offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
94
95
96
97
98
99 if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO) {
100
101 value = SdioLocalCmd52Read1Byte(padapter, offset);
102
103 value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
104 value |= (
105 GET_PWR_CFG_VALUE(PwrCfgCmd) &
106 GET_PWR_CFG_MASK(PwrCfgCmd)
107 );
108
109
110 SdioLocalCmd52Write1Byte(padapter, offset, value);
111 } else {
112
113 value = rtw_read8(padapter, offset);
114
115 value &= (~(GET_PWR_CFG_MASK(PwrCfgCmd)));
116 value |= (
117 GET_PWR_CFG_VALUE(PwrCfgCmd)
118 &GET_PWR_CFG_MASK(PwrCfgCmd)
119 );
120
121
122 rtw_write8(padapter, offset, value);
123 }
124 break;
125
126 case PWR_CMD_POLLING:
127 RT_TRACE(
128 _module_hal_init_c_,
129 _drv_info_,
130 ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n")
131 );
132
133 bPollingBit = false;
134 offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
135 do {
136 if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
137 value = SdioLocalCmd52Read1Byte(padapter, offset);
138 else
139 value = rtw_read8(padapter, offset);
140
141 value = value&GET_PWR_CFG_MASK(PwrCfgCmd);
142 if (
143 value == (GET_PWR_CFG_VALUE(PwrCfgCmd) &
144 GET_PWR_CFG_MASK(PwrCfgCmd))
145 )
146 bPollingBit = true;
147 else
148 udelay(10);
149
150 if (pollingCount++ > maxPollingCnt) {
151 DBG_871X(
152 "Fail to polling Offset[%#x]=%02x\n",
153 offset,
154 value
155 );
156 return false;
157 }
158 } while (!bPollingBit);
159
160 break;
161
162 case PWR_CMD_DELAY:
163 RT_TRACE(
164 _module_hal_init_c_,
165 _drv_info_,
166 ("HalPwrSeqCmdParsing: PWR_CMD_DELAY\n")
167 );
168 if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
169 udelay(GET_PWR_CFG_OFFSET(PwrCfgCmd));
170 else
171 udelay(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
172 break;
173
174 case PWR_CMD_END:
175
176 RT_TRACE(
177 _module_hal_init_c_,
178 _drv_info_,
179 ("HalPwrSeqCmdParsing: PWR_CMD_END\n")
180 );
181 return true;
182
183 default:
184 RT_TRACE(
185 _module_hal_init_c_,
186 _drv_err_,
187 ("HalPwrSeqCmdParsing: Unknown CMD!!\n")
188 );
189 break;
190 }
191 }
192
193 AryIdx++;
194 } while (1);
195
196 return true;
197 }